如何将bash / awk命令放入变量(不输出命令)

时间:2014-07-31 10:00:41

标签: linux bash awk

我试图将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函数运行。

2 个答案:

答案 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

顺便说一句,我在函数中添加了一些引号,因为如果它们的值包含空格,它通常是一个好主意。