我已经通过了一些类似的问题(如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变量实际上最初是用引号引起来的,当我测试脚本的错误捕捉函数时,我把它引出来,强制出错。再次,非常感谢! –