2014-03-21 5 views
0

Shell скрипт 1.sh, какКак вызвать скрипт оболочки из другого сценария оболочки на основе результата первого скрипта?

#/bin/bash 

if some java command; 
then 
exit 1; 
else  
exit 0; 
fi 

Shell скрипт 2.sh будет определять его выполнение на основе результата (1 или 0) от 1.sh

#/bin/bash 
readyToDoSomethingIfOne=$(1.sh) 

if($readyToDoSomethingIfOne=="1"); 
then 
echo "ready to go"; 
else  
echo "Not ready yet" ; 
fi 

Похоже, команда выхода от 1.sh не передает значение 2.sh. Есть ли хороший способ сделать это?

Кстати, 1.sh и 2.sh необходимо разделить по соображениям бизнеса.

Благодаря

+0

Статус выхода - '$?', Не записанный в '$()' (который получает контент, отправленный на stdout). В общем, если вы хотите узнать, что-то преуспело или нет, вам не нужно явно проверять '$?' - 'если some_command' примет истинную ветвь, если' $? 'Равно 0 после запуска' some_command ', иначе ветвь иначе. –

+0

Кстати, скрипты bash не должны называться с расширением '.sh' - во-первых, в командах обычно нет расширений в UNIX (вы не запускаете' ls.elf'); во-вторых, bash - это не POSIX sh, а кто-то, запущенный 'sh foo.sh', а не' bash foo.sh', был бы неожиданным сюрпризом, если бы вы использовали какие-либо функции, недоступные в стандартной форме языка barebone. –

+2

Кстати, 'exit 0' следует использовать для успеха и' exit 1' при сбое. –

ответ

0
#/bin/bash 
if readyToDoSomethingIfOne=$(1.sh); then # Just use the exit status of the initial script directly. 
    … 
else 
    echo 'nope!' 
fi 

Если вы на самом деле не нужна переменная вообще, просто запустить скрипт так:

if ./1.sh; then 
    echo "Not ready yet" 
    return/exit/continue # Not enough context to know which exit approach is best. 
fi 
+0

Большое вам спасибо. Работает как шарм. – user2029709

2
#/bin/bash 

if 1.sh; then 
    echo "ready to go"; 
else  
    echo "Not ready yet" ; 
fi 
+2

Хотя ваш ответ правильный, вам нужно сказать 'if! 1.sh', чтобы _comply_ с OPs 'return' _convention_. (Взгляните на сценарий OPs 1, он вернется с кодом выхода из 1, если команда успешна ':)') – devnull

+3

@devnull, я собираюсь оставить это как есть и усовершенствовать ваш комментарий. Лучше для OP исправить свой код. –

0

Конструкт

VAR=$(COMMAND) 

назначает вывод КОМАНДЫ к переменной VAR. Вы можете получить статус выхода последней команды от автоматической переменной $?. Это

COMMAND 
case $? in 
    0) 
     # do this 
     ;; 
    1) 
     # do that 
     ;; 
    *) 
     # do something else 
     ;; 
esac 

Если вы хотите провести различие между успехом ($? == 0) и неудачи ($? != 0), то вы можете использовать более простую конструкцию if, как в вашем script1.sh.

Если вы используете $?, следите за тем, чтобы он менялся после каждой команды, поэтому, если вам нужно значение для последующего использования, сохраните его в переменной.

COMMAND 
status=$? 
# now use $status 
Смежные вопросы