我通过macOS终端连接到远程Debian系统。
apt-get
never runs if apt-get
installs something首先,我从macOS上的文本文件中复制这三个命令,然后使用单个命令将其粘贴到终端中+ v press:
sudo apt-get -y remove tree
sudo apt-get -y install tree
echo hi
这是我在终端看到的。
lone@lone:~$ sudo apt-get -y remove tree
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'tree' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 17 not upgraded.
lone@lone:~$ sudo apt-get -y install tree
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
tree
0 upgraded, 1 newly installed, 0 to remove and 17 not upgraded.
Need to get 0 B/46.1 kB of archives.
After this operation, 106 kB of additional disk space will be used.
Selecting previously unselected package tree.
(Reading database ... 31853 files and directories currently installed.)
Preparing to unpack .../tree_1.7.0-5_amd64.deb ...
Unpacking tree (1.7.0-5) ...
Setting up tree (1.7.0-5) ...
Processing triggers for man-db (2.7.6.1-2) ...
lone@lone:~$
第三个命令echo hi
从未执行过。为什么?
apt-get
does run if apt-get
does not install anything下次,我只需使用一个命令+ v press粘贴这两个命令:
sudo apt-get -y install tree
echo hi
这一次,由于tree
已经安装,apt-get
不需要再次安装它。这是我看到的输出:
lone@lone:~$ sudo apt-get -y install tree
Reading package lists... Done
Building dependency tree
Reading state information... Done
tree is already the newest version (1.7.0-5).
0 upgraded, 0 newly installed, 0 to remove and 17 not upgraded.
lone@lone:~$ echo hi
hi
这次echo hi
被执行了。为什么?
每次执行这两组操作时,这两个结果都是可重现的。为什么echo hi
命令不在第一个例子中运行,而在第二个例子中运行?
apt-get
或apt-get
调用的程序正在清空它的stdin(它恰好与shell的命令列表相同)。
既然您不需要从用户那里读取任何内容,那么从/ dev / null重定向stdin:
sudo apt-get -y remove tree </dev/null
sudo apt-get -y install tree </dev/null
echo hi