为什么apt-get在安装东西时会消耗stdin而不是其他东西呢?

问题描述 投票:0回答:1

我通过macOS终端连接到远程Debian系统。

Command after 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从未执行过。为什么?

Command after 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命令不在第一个例子中运行,而在第二个例子中运行?

shell terminal command command-line-interface buffer
1个回答
1
投票

apt-getapt-get调用的程序正在清空它的stdin(它恰好与shell的命令列表相同)。

既然您不需要从用户那里读取任何内容,那么从/ dev / null重定向stdin:

sudo apt-get -y remove tree </dev/null
sudo apt-get -y install tree </dev/null
echo hi
© www.soinside.com 2019 - 2024. All rights reserved.