Почему apt-get использует stdin, когда он что-то устанавливает, но не иначе? - PullRequest
0 голосов
/ 17 февраля 2019

Я подключен к удаленной системе Debian через терминал MacOS.

Команда после apt-get никогда не запускается, если apt-get устанавливает что-то

Сначала я копирую эти три команды изтекстовый файл на моем macOS и вставьте его в терминал с помощью одной команды + v нажмите:

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 ничего не устанавливает

В следующий раз я просто вставлю эти две команды одной командой + v нажмите:

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 не выполняется в первом примере, а во втором примере?

1 Ответ

0 голосов
/ 17 февраля 2019

apt-get или программа, вызываемая apt-get, очищает свой стандартный ввод (который совпадает с тем, что используется в оболочке, где происходит ваш список команд).

Поскольку вы знаете, что ничего не нужночтобы прочитать от пользователя, перенаправьте стандартный ввод из / dev / null:

sudo apt-get -y remove tree </dev/null
sudo apt-get -y install tree </dev/null
echo hi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...