为什么 apt-get 在安装某些东西时会消耗 stdin,而在其他情况下却不会?
Why does apt-get consume stdin when it installs something but not otherwise?
我通过 macOS 终端连接到远程 Debian 系统。
apt-get
之后的命令永远不会 运行 如果 apt-get
安装了某些东西
首先,我从我的 macOS 上的文本文件中复制这三个命令,然后使用单个 command+v[=47 将其粘贴到终端中=] 按:
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
之后的命令执行 运行 如果 apt-get
没有安装任何东西
下次,我只需将这两个命令粘贴到一个 command+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
调用的程序正在清空其标准输入(这恰好与 shell 相同,您的命令列表源自此处)。
因为您知道不需要从用户那里读取任何内容,所以从 /dev/null:
重定向标准输入
sudo apt-get -y remove tree </dev/null
sudo apt-get -y install tree </dev/null
echo hi
我通过 macOS 终端连接到远程 Debian 系统。
apt-get
之后的命令永远不会 运行 如果 apt-get
安装了某些东西
首先,我从我的 macOS 上的文本文件中复制这三个命令,然后使用单个 command+v[=47 将其粘贴到终端中=] 按:
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
之后的命令执行 运行 如果 apt-get
没有安装任何东西
下次,我只需将这两个命令粘贴到一个 command+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
调用的程序正在清空其标准输入(这恰好与 shell 相同,您的命令列表源自此处)。
因为您知道不需要从用户那里读取任何内容,所以从 /dev/null:
重定向标准输入sudo apt-get -y remove tree </dev/null
sudo apt-get -y install tree </dev/null
echo hi