我有一个shell脚本,该脚本在逻辑中的某些重要位置进行回显。每次执行回显时,我都会通过执行>> /some/location/my_logtxt
将日志附加到日志文件中。
逻辑如下所示
ret=123
echo Something happened $ret >> /some/location/my_logtxt
// some logic
echo Something else happened $ret >> /some/location/my_logtxt
// some more logic
echo Something else happened again $ret >> /some/location/my_logtxt
问题:
>> /some/location/my_logtxt
执行此echo
吗?
答案 0 :(得分:1)
如果您希望所有输出 转到日志文件,则可以使用exec
进行重定向:
exec >> "$logfile"
您也可能希望重定向stderr:2>&1
。
如果只希望重定向echo
命令,则可以为此连接未使用的流(大于2):
exec 3>> "$logfile"
ret=123
echo "Something happened $ret" >&3
# some logic
echo "Something else happened $ret" >&3
请注意,这些方法不再为每次写入重新打开日志-如果您重命名日志文件,则输出将继续进入该日志文件,而在原始日志中,后续输出最终将在旧文件的新文件中结束名称。
答案 1 :(得分:1)
您可以将您的内容放在子shell中,并重定向子shell的输出:
(
ret=123
echo Something happened "$ret"
// some logic
echo Something else happened "$ret"
// some more logic
echo Something else happened again "$ret"
) >> /some/location/my_logtxt
如果您只想影响自己的echo
语句,我建议改用myecho
语句:
myecho() {
echo "$@" >> /some/location/my_logtxt
}
ret=123
myecho Something happened "$ret"
// some logic
myecho Something else happened "$ret"
// some more logic
myecho Something else happened again "$ret"
(更合适的名称可能像log
而不是myecho
,但我想你明白了。)