У меня есть запрос с контролем потока. Я хочу выйти из скрипта на терминал, когда сообщение: HOSTNAME NOT ADDED IN /tmp/hosts EXITING , что является сообщением об ошибке .

if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts; then
  echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]; then
  echo " HOSTNAME NOT ADDED IN /tmp/hosts EXITING"; exit
fi|tee -a /tmp/log;

Я попробовал приведенный выше скрипт, но он не может выйти из-за ошибки. Как это исправить?

1 ответ1

0

Я считаю, что проблема в том, что всякий раз, когда вы создаете канал, оболочка помещает обе стороны в отдельные процессы, даже если это не нужно.  В частности, ваш блок оператора if - fi выполняется в отдельном процессе от самого сценария оболочки, поэтому ваш оператор exit просто завершает блок if - в любом случае, в точке, где он собирается завершиться - так что он ничего не выполняет.

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

exit_flag_file="/tmp/my_exit.$$"
rm –f "$exit_flag_file"
if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts
then
    echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]
then
    echo " HOSTNAME NOT ADDED IN /tmp/hosts; EXITING"
    > "$exit_flag_file"
fi | tee -a /tmp/log
if [ -f "$exit_flag_file" ]
then
    exit
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .