我试图将bash命令放入变量中,然后使用退出代码函数运行。
command1="$(awk -v previous_date=$reply -f $SCRIPT_HOME/tes.awk <(gzip -dc $logDir/*) > $OUTFILE)" # Step 1
check_exit $command1 # Step2
此处它在步骤1中运行命令并始终返回0退出代码。
如何将命令放在变量中,然后使用exit函数运行。
答案 0 :(得分:2)
您可以这样声明您的功能:
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
答案 1 :(得分:1)
尝试使用功能:
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
顺便说一句,我在函数中添加了一些引号,因为如果它们的值包含空格,它通常是一个好主意。