2013-04-12 86 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得到它。 –