我已經通過了一些類似的問題(如How to set a variable to the output from a command in Bash?),但是之後被接受的答案似乎不爲我工作。我不確定我是否應該脫軌別人的問題或張貼我自己的副本,所以如果我在這裏選擇了錯誤,請致歉。如何獲得bash命令的輸出變量
我希望得到一個腳本,我組建了一個數量的命令的輸出和退出狀態。這是我一直在使用什麼樣的一個例子:
cmd_output=$(rm $file)
exit_status=$?
if [ "${exit_status}" -eq 0 ]
then
log "Successfully removed the original" ${TAB_LEVEL}
else
fail "Failed to remove the original, the output was: \n ${cmd_output}"
fi
日誌和故障的功能是:
# Usage: fail "Failure message"
function fail {
echo "FATAL ERROR: $1" >> "${LOG_DIR}/${LOG_FILE}"
exit 1
}
# Usage: log "Log message" 3 Where the tab-level is 3.
function log {
if (("${2}" > 0))
then
eval "printf ' %.0s' {1..$2}" >> "${LOG_DIR}/${LOG_FILE}"
fi
echo "$1" >> "${LOG_DIR}/${LOG_FILE}"
return 0
}
在上面的例子中我使用$(CMD)格式,但我自己也嘗試使用反引號。
在我的日誌文件,我看到的時候有一個失敗:
FATAL ERROR: Failed to remove the original, the output was: \n
此外,失敗的命令的輸出按通常在屏幕上結束。是否有一個共同的原因,我的cmd_output變量將保持爲空?
很高興推動你超過1000分,繼續發帖! – shellter
嘿Janito,非常感謝您的回答!我知道三個標準流和重定向操作符,但迄今爲止我使用它們的唯一原因是將所有內容從命令發送到/ dev/null或發送到日誌文件。我甚至沒有考慮這裏的不同流。 $ file變量實際上最初是用引號引起來的,當我測試腳本的錯誤捕捉函數時,我把它引出來,強制出錯。再次,非常感謝! –