我试图把bash命令放入一个variables,然后运行退出代码function。
command1="$(awk -v previous_date=$reply -f $SCRIPT_HOME/tes.awk <(gzip -dc $logDir/*) > $OUTFILE)" # Step 1 check_exit $command1 # Step2
这里它在步骤1中运行命令并始终返回0退出代码。
我怎样才能把命令放入一个variables,然后运行退出函数。
尝试使用一个函数:
do_stuff() { echo "$var"; echo that; }
您稍后可以调用此函数并检查错误代码:
$ var="this" $ do_stuff this that $ echo $? 0
在脚本的全局范围中定义的变量将对该函数可见。
所以对于你的例子:
command1() { awk -v previous_date="$reply" -f "$SCRIPT_HOME/tes.awk" <(gzip -dc "$logDir/*") > "$OUTFILE"); } check_exit command1
顺便说一句,我在你的函数中加了一些引号,因为如果它们的值包含空格,通常是个好主意。
你可以这样声明你的函数:
function command1 { awk -v "previous_date=$reply" -f "$SCRIPT_HOME/tes.awk" <(gzip -dc "$logDir"/*) > "$OUTFILE" }
或者更老的形式:
command1() { awk -v "previous_date=$reply" -f "$SCRIPT_HOME/tes.awk" <(gzip -dc "$logDir"/*) > "$OUTFILE" }
请注意将变量放在双引号内以防止分词和路径名扩展。
有些POSIX会更喜欢使用旧版本的兼容性,但是如果你只是用bash来运行你的代码,那么所有的东西都可以成为首选。
你也可以有另外一个checkexit
函数来检查命令的退出码:
function checkexit { "$@" echo "Command returned $?" }
示例运行:
checkexit command1