Как распространить код выхода из вложенных команд bash - PullRequest
0 голосов
/ 07 ноября 2019

В следующем сценарии

$ echo $(cat some-file-that-doesnt-exist)

Я бы хотел, чтобы внешняя команда не работала (код выхода! = 0), если внутренняя команда терпит неудачу.

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Самый чистый способ (и на данный момент единственный способ, которым я могу придумать, хотя меня не удивит, если bash имеет какую-то настройку параметров, которая замыкает стандартный процесс и делает то, что вы хотите, но я бы не хотелиспользовать такую ​​вещь, если она существует) - это разбить команду на части. То есть:

$ content=$(cat /p/a/t/h) && echo "$content"
0 голосов
/ 07 ноября 2019

Для случая cat в качестве внутренней команды вы можете использовать структуру $(<filename. Это эффективно устранит внутреннюю команду и вызовет обработку ошибок (set -e, ERR trap, ...), если файл не существует

x=$(</path/to/file)
0 голосов
/ 07 ноября 2019

Если вам нужно только остановить цепочку команд при ошибке (вместо передачи их кода выхода), вы можете использовать логический оператор AND &&:

x=$(cat some-file-that-doesnt-exist) && echo "$x"

Объединить с логическим или || вы можете сделать:

x=$(cat input.a) || x=$(cat input.b) || x=$(cat input.c) && echo "input is: $x"

Где echo запускается только при наличии одного или нескольких файлов.

...