[英]How to put bash / awk commands into a variable ( not output of commands)
我試圖只是將bash命令放入一個變量中,然后使用退出代碼功能運行。
command1="$(awk -v previous_date=$reply -f $SCRIPT_HOME/tes.awk <(gzip -dc $logDir/*) > $OUTFILE)" # Step 1
check_exit $command1 # Step2
在這里,它運行步驟1中的命令,並且始終返回0退出代碼。
如何將命令放入變量中,然后再使用退出功能運行。
您可以通過以下方式聲明函數:
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"
}
注意將變量放在雙引號內以防止單詞分裂和路徑名擴展。
一些POSIXists寧願您使用舊版本來實現兼容性,但是如果您僅使用bash運行代碼,則所有內容都可以作為首選項。
您還可以使用另一個功能,例如checkexit
,它可以檢查命令的退出代碼:
function checkexit {
"$@"
echo "Command returned $?"
}
示例運行:
checkexit command1
嘗試使用功能:
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
順便說一句,我在函數中的變量周圍加上了一些引號,因為如果它們的值包含空格,通常是個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.