Как выполнить команду выхода при использовании && и ||? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть два сценария.

  1. echo a &>/dev/null && echo b || (echo c ; exit 1) ; echo d ;echo e;echo f

вывод:

b

d

e

f

echo a &>/dev/null && echo b || (echo c ; exit 1) ; echo d ;echo e;echo f

выход:

c

d

e

f

Мне нужен мой скрипт, чтобы выйти после команды выхода и не выполнять дальнейшие команды.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Команды в ( ) выполняются в подоболочке, поэтому exit внутри скобок выходит только из подоболочки, а не из основной оболочки.Вы можете сгруппировать команды без , заставляя подоболочку, используя { } вместо скобок.Примечание: в отличие от паренов, вам нужен пробел после { и точка с запятой (или амперсанд) перед }.

$ eco a &>/dev/null && echo b || { echo c ; exit 1; } ; echo d ;echo e;echo f output
c
logout

Кроме того, вы должны знать, что использование && ... || означает не аналогично if then else fi структуре;в частности, если команда между && и || (что соответствует предложению then в операторе if) не будет выполнена, она также выполнит то, что следует после ||.Имея только echo b, маловероятно (но технически возможно), что он потерпит неудачу;если это сложнее, вы можете получить неожиданные результаты.

В результате я рекомендую использовать if then else fi вместо && || - он правильно обрабатывает группировку без дополнительных хлопот и неочевидные пути выполнения.В отличие от && ||, он просто работает.

0 голосов
/ 10 октября 2018

exit в конечном итоге выйдет из подоболочки ((...)), а не к вызывающему ее скрипту.

См. Группировка команд .

Однако echo bвыйти со статусом 0, поэтому все, что будет после ||, не будет выполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...