2013-04-12 2 views
-1

뭔가를 처리 할 수있는 bash 스크립트 파일이 있습니다.Bash 스크립트 : 한 줄로 여러 명령 실행하기 && 리턴 코드 받기

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

는, 당신은 찾을 0의 종료 상태은'$ c_command' 실행 벌금 명령과 거기 대신 문자열 코드를 저장

, 당신은 함수를 사용해야합니다 대신 전체 스크립트가 종료 되는가? 실제로 여기에 붙여 넣은 스크립트를 실행하고 있습니까? –

+0

예, $ c_command는 return exit code가 9가 아닌 9가되어야합니다. 왜냐하면 여기에 "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. –

관련 문제