2011-12-19 2 views
3

Я знаю, что код возврата будет содержаться в $? после выполнения команды, но что означает $? после выполнения сценария? Код возврата последней команды в этом скрипте?Имеет ли сценарий bash код возврата сам?

Могу ли я определить, был ли сценарий искривлен от головы до хвоста и не прерван какой-то неожиданной остановкой системы или чем-то еще?

Если у меня есть сценарий, как показано ниже excuted,

Command A; 
if [ $? -eq 0] 
then 
echo "OK" >> log 
else 
echo "failed" >> log 
fi 

и система остановлена ​​в то время как A был запущен, то, что я найду в этом файле журнала? «ОК», «не удалось» или ничего?

ответ

6
  1. Да или значение, прошедшее после exit, например. exit 31.

  2. Не без принятия мер в рамках другого сценария, чтобы сделать его явным.

+0

Если другой скрипт был прерван прерывание, статус выхода, сообщенный оболочке, не будет равен нулю (если только скрипт обрабатывал или игнорировал прерывание и организовал нулевой вывод после всех). Если система остановилась, вызывающий скрипт тоже остановился - нет возможности определить что-либо, если у вас нет очень сложной системы для обработки повторений и т. Д. –

+0

Обратите внимание, что если последняя команда, выполняемая скриптом, не 'exit' (например, если он выйдет из-за того, что он попал в конец файла сценария или вышел из-за «set -e' и ошибки), код возврата скрипта будет кодом возврата последней выполненной команды. –

+0

Это было бы «да». –

4

$? считывает статус выхода последней выполненной команды. После возврата функции $? дает статус выхода последней команды, выполняемой в функции. Это путь в Bash дать функции а «возвращаемое значение.

Example

#!/bin/bash 

echo hello 
echo $? # Exit status 0 returned because command executed successfully. 

lskdf  # Unrecognized command. 
echo $? # Non-zero exit status returned because command failed to execute. 

echo 

exit 113 # Will return 113 to shell. 
     # To verify this, type "echo $?" after script terminates. 

# By convention, an 'exit 0' indicates success, 
#+ while a non-zero exit value means an error or anomalous condition 
+0

Спасибо за вашу помощь :) – erical

0

код возврата сценария действительно код возврата последней команды, некоторые команды позволяют закончить выполнение в любой point и произвольно установить код возврата: exit для скриптов и return для функций, но в обоих случаях, если вы опустите аргумент, они просто будут использовать код возврата предыдущей команды.

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