Pull to refresh

Comments 16

Я вставил две команды, но первой требуется пароль. Далее в качестве пароля была считана вторая команда, что привело к ошибке

Это не так. Пока первая команда не выполнилась, вторая выполняться не начнёт, и уж точно не попадёт во ввод первой команды.


Например:


$ sudo echo 1 ; sudo echo 2
[sudo] password for user: 
1
2

В статье случай, когда команды в разных строках.
Как минимум в случае если просто вставить их в терминал, поведение будет тем, что описано.

$ cat ./test.sh
#!/bin/bash
sudo echo 1
sudo echo 2

$ ./test.sh
[sudo] password for user: 
1
2

Не играет роли. Следующая команда не попадает на stdin предыдущей, иначе большая часть скриптов не работала бы.

Никто не говорит про команды, записанные в файле. Скопируйте ваши "sudo echo 1
sudo echo 2" в буфер обмена и вставьте в терминал — тогда и увидите обсуждаемый эффект.

В скриптах для этого делают первой строчкой


set -e

Потому что, когда вставляете в терминал, сначала вставляется из буфера и начинает выполняться одна команда, доходит до ожидания ввода и вот тут-то из буфера попадает на stdin следующая порция. В скрипте такого не происходит. Точка с запятой или команды на разных строках — в скрипте не играет роли.

Я вставил две команды, но первой требуется пароль.

Ну да, прямо совсем не написано.

Видимо, имеется ввиду, что, если в документации приведены команды на разных строках, то читатель может просто их скопировать и вставить в терминале. Вот в этом случае, да, на вход ожидающей ввода команде попадет остаток из буфера. Корректнее было бы в любом случае использовать точку с запятой, ну или как и приведено в статье. Только из двух аргументов в пользу примера из статьи работает только один — первый. :-)

Я часто обращаюсь к документации, откуда копирую команды оболочки

Именно это там и написано.

nmcli n off && nmcli n on
Лучше заучить на уровне подсознания ))

UFO landed and left these words here
Так речь же не о скрипте, а о документации из которой копипастят.

Обычно пишу в доках однострочники вида:


command1 && command2 && command3 && echo Success

И добавляю: Expected output: Success


Здорово помогает простому человеку понять, всё ли сработало и была ли ошибка

Sign up to leave a comment.