2013-04-12 3 views
-1

У меня есть файл сценария bash для обработки чего-то.Bash Script: выполнить несколько команд в одной строке && получить код возврата

control.sh:

c_command="echo 'Hello'; echo ', Stack Overflow';exit 9"; 
$c_command; 
stat=$?; 

if [ $stat -eq 0 ];then 
     echo 'Do something....' 
elif [ $stat -eq 9 ];then 
     echo 'The system will be rebooting...'; 
else 
     echo "..." 
fi 

Я использую переменную $ c_command, чтобы выполнить команду, и я получаю код завершения 0 не 9. Если я вставить его в командной строке отработаны, но когда я запускаю скрипт очень плохо.

Как правило, когда я выполняю команду «exit» в скрипте, тогда сценарий будет завершен. И я просто хочу, чтобы команда выполнялась не с помощью сценария, и получить код выхода из выполненной команды.

Я решил эту проблему:

Я поставил код в $ c_command в файл сценария и запустить его.

c_command="echo 'Hello'; echo ', Stack Overflow';exit 9"; 
echo "${c_command}" > tmp.sh; 
/bin/bash tmp.sh; 
stat=$?; 

if [ $stat -eq 0 ];then 
     echo 'Do something....' 
elif [ $stat -eq 9 ];then 
     echo 'The system will be rebooting...'; 
else 
     echo "..." 
fi 
+0

Когда я запускаю этот скрипт, команды '$ c_command' выполнения штрафа и там статус выхода 0. Вы найдете что вместо этого завершается весь скрипт? Вы действительно запускаете скрипт, который вы вставляете сюда? –

+0

Yep, $ c_command должен быть обратным кодом выхода 9, а не 0, потому что здесь я помещаю код «exit 9». –

ответ

2

Взгляните на то, что ваш скрипт будет печатать, и это должно дать вам подсказку о том, почему статус выхода 0:

$ bash ./control.sh 
'Hello'; echo ', Stack Overflow';exit 9 
Do something.... 

После c_command расширяется, с запятой, не рассматриваются как разделители команд, но как буквенные символы. В результате у вас есть одна команда echo, которая выдает 0, а не пару команд echo, за которыми следует команда exit.

Вместо того чтобы хранить код в строке, следует использовать функцию:

c_command() { 
    echo 'Hello'; echo ', Stack Overflow';return 9 
} 
c_command 
stat=$? 
+0

Во-первых, спасибо. Но $ c_command не исправлен, я получаю его через «grep» и «cut». –

+0

@fozzmarc: Где в него попадают grep и cut? Кроме того, прочитайте [BashFAQ # 50: я пытаюсь добавить команду в переменную, но сложные случаи всегда терпят неудачу!] (Http://mywiki.wooledge.org/BashFAQ/050) –

+0

Хорошо, я прочитал документ , И я знаю. Я получаю его из «# update # 3322 # 1.0 #/bin/bash 3322.sh # touch a.file; echo 'success'; exit 9" string. –

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