获取Bash和KornShell(Ksh)中命令的退出代码 [英] Get the exit code for a command in Bash and KornShell (ksh)
本文介绍了获取Bash和KornShell(Ksh)中命令的退出代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想写这样的代码:
command="some command"
safeRunCommand $command
safeRunCommand() {
cmnd=$1
$($cmnd)
if [ $? != 0 ]; then
printf "Error when executing command: '$command'"
exit $ERROR_CODE
fi
}
但此代码不能以我想要的方式工作。我在哪里犯了错误?
推荐答案
以下是固定代码:
#!/bin/ksh
safeRunCommand() {
typeset cmnd="$*"
typeset ret_code
echo cmnd=$cmnd
eval $cmnd
ret_code=$?
if [ $ret_code != 0 ]; then
printf "Error: [%d] when executing command: '$cmnd'" $ret_code
exit $ret_code
fi
}
command="ls -l | grep p"
safeRunCommand "$command"
现在,如果您查看这段代码,我更改的几项内容如下:
- 使用
typeset
不是必需的,但这是一个很好的实践。它使cmnd
和ret_code
成为safeRunCommand
的本地 - 使用
ret_code
不是必需的,但最好将返回代码存储在某个变量中(并尽快存储),以便以后可以像我在printf "Error: [%d] when executing command: '$command'" $ret_code
中那样使用它
- 传递命令时使用引号将命令引起来,如
safeRunCommand "$command"
。如果不这样做,cmnd
将只获得值ls
,而不是ls -l
。如果您的命令包含管道,则更重要。 - 如果您想保留空格,可以使用
typeset cmnd="$*"
而不是typeset cmnd="$1"
。根据命令参数的复杂程度,您可以同时尝试这两种方法。 - ‘val’用于计算,以便包含管道的命令可以正常工作
注意:请记住,有些命令将1作为返回码,即使没有任何类似grep
的错误。如果grep
找到某项内容,则返回0,否则返回1。
我使用KornShell和Bash进行了测试。而且它运行得很好。如果您在运行此程序时遇到问题,请通知我。
这篇关于获取Bash和KornShell(Ksh)中命令的退出代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文