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 предыдущей, иначе большая часть скриптов не работала бы.
Потому что, когда вставляете в терминал, сначала вставляется из буфера и начинает выполняться одна команда, доходит до ожидания ввода и вот тут-то из буфера попадает на stdin следующая порция. В скрипте такого не происходит. Точка с запятой или команды на разных строках — в скрипте не играет роли.
В статье не написано про вставку в терминал, в этом случае и правда сработает, вы правы.
Видимо, имеется ввиду, что, если в документации приведены команды на разных строках, то читатель может просто их скопировать и вставить в терминале. Вот в этом случае, да, на вход ожидающей ввода команде попадет остаток из буфера. Корректнее было бы в любом случае использовать точку с запятой, ну или как и приведено в статье. Только из двух аргументов в пользу примера из статьи работает только один — первый. :-)
nmcli n off && nmcli n on
Лучше заучить на уровне подсознания ))
Обычно пишу в доках однострочники вида:
command1 && command2 && command3 && echo Success
И добавляю: Expected output: Success
Здорово помогает простому человеку понять, всё ли сработало и была ли ошибка
${var?} и && — два простых помощника в работе с командами оболочки из документации