Как отловить / bin / bash: ошибка интерпретатора - PullRequest
0 голосов
/ 30 апреля 2019

недавно столкнулся с проблемой при запуске bash-скрипта, выполняемого в оболочке csh. Это было выдано: / bin / bash: плохой интерпретатор: такого файла или каталога нет. Проблема была bash не на пути к среде. После добавления bash это было исправлено. Я хочу убедиться, что в будущем, если это когда-нибудь случится снова по какой-то причине, я справлюсь с этим. Мне интересно, что это за код выхода? или это просто распечатано на stderr? Я хочу поймать это и провалить основной скрипт. Любые идеи о том, как справиться с этим?

У меня есть этот сегмент:

bash sc142.sh

#####################################################################
# Check for processing errors
#####################################################################
if ($status != 0) then
    exit (-1)
endif

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Я пробовал это в Debian, статус выхода для ошибки неверного интерпретатора - 126.Таким образом, вы можете сделать:

/path/to/scriptname arg ...
if ( $status == 126 ) then
    echo "scriptname failed"
    exit 1
endif

Обратите внимание, что возможен ложный положительный результат.Если последняя команда в вашем скрипте завершается со статусом 126, вы не сможете увидеть разницу.

1 голос
/ 30 апреля 2019

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

В вашем скрипте csh вы можете установить опцию -e, которая приведет к немедленному завершению работы скрипта в случае сбоя какой-либо команды.

#!/bin/csh -e
false
echo not printed
...