2016-03-02 3 views
0

У меня есть сценарий bash Я хочу самоуничтожить при исполнении. Пока это отлично работает , но. Мне бы хотелось, чтобы некоторые окончательные проверки, что если никаких ошибок не произошло (любой вывод на stderr), тогда идите вперед и самостоятельно уничтожайте. В противном случае я хотел бы оставить сценарий в такт. У меня есть код для всего, кроме проверки ошибок. Не уверен, могу ли я просто вывести err в файл и проверить, пуст ли файл. Я уверен, что это простое решение.Как я могу использовать оператор if в bash, чтобы проверить, не возникли ли ошибки?

Как я мог это сделать?

Спасибо за любую помощь.

+1

Будет ли «устанавливать -e' делать? – Biffen

+0

Я не знаком с командой, но, глядя на нее, кажется, что так. Обеспечивает ли он также выход stderr? Я решил, что могу положить set -e в начало скрипта, и если он доберется до rm - «$ 0», то я предполагаю, что все прошло отлично. – user3000724

+0

Нет, 'set -e' не имеет ничего общего с STDERR, он просто имеет дело с кодами выхода. Обратите внимание, что только потому, что команда печатает в STDERR, это не значит, что она потерпела неудачу. Многие команды просто используют его для ведения журнала. Код выхода команды * должен * указывать на его успех. – Biffen

ответ

1

Если предположить, что сценарий возвращает значение 0 в случае успеха, значение от 1 до 255, если ошибка происходит вы можете использовать следующую команду

if /path/to/myscript; then 
    echo success 
else 
    echo failed 
fi 

вы также можете использовать следующие (короче) команда

[[ /path/to/myscript ]] && echo success || echo failed 
0

Вы можете попробовать это. $? содержит код возврата для последнего процесса, выполняемого командой. Более того, стандартные производные nix демаркируют 0 как (без ошибок) и 1 - 255 как какие-то ошибки, которые произошли. Обратите внимание, что это будет сообщать об ошибках, которые не обязательно имеют какой-либо вывод stderr.

command 
if [ "$?" -ne 0 ]; then 
    echo "command failed"; 
    # your termination logic here 
    exit 1; 
fi 

 Смежные вопросы

  • Нет связанных вопросов^_^