2013-04-12 56 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 如果我將其粘貼在命令行中運行完美,但當我腳本運行是非常糟糕的。

通常,當我在腳本中執行「退出」命令時,腳本將退出。 而我只想讓命令完成而不是腳本,並從執行的命令中獲取退出代碼。

我解決了這個問題:

我把$ 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

是的, $ c_command應該是返回退出代碼是9不是0,因爲我把「退出9」代碼在這裏。 –

回答

2

看看你的腳本實際打印,這應該給你一個關於爲何退出狀態是0線索:

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

c_command擴大,分號不被視爲命令分隔符,但是作爲文字字符。因此,您有一個退出0的命令echo,而不是一對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

好的,我讀了doc ,我知道它。我從「#update#3322#1.0#/ bin/bash 3322.sh#touch a.file; echo'success'; exit 9」string得到它。 –