Linux 如何轻松地将shell脚本中的所有echo语句放入日志文件
我有一个shell脚本,它会在逻辑中的一些重要位置进行响应。每次回显时,我都通过执行Linux 如何轻松地将shell脚本中的所有echo语句放入日志文件,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我有一个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 m
/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
问题:是否有一条语句可以说明所有echo语句日志都进入以下文件,而不是对每个
echo
执行此操作?如果希望所有输出都进入日志文件,可以使用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
请注意,这些方法不再在每次写入时重新打开日志-如果重命名日志文件,输出将继续转到日志文件,而在原始文件中,后续输出将以旧名称的新文件结束。如果希望所有输出都转到日志文件,可以使用
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
请注意,这些方法不再在每次写入时重新打开日志-如果重命名日志文件,输出将继续转到日志文件,而在原始文件中,后续输出将以旧名称结束在新文件中。您可以在子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
,但我想你明白了。)
(
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
,但我想你明白了。)你想在这里保存什么?减少行数?可能定义一个函数,并将参数作为字符串传递,以写入文件并使用参数调用函数?确定。创建一个方法也应该有效。但我想知道的是,在shell脚本中是否有一种标准的方法来处理这个问题,您想在这里保存什么?减少行数?可能定义一个函数,并将参数作为字符串传递,以写入文件并使用参数调用函数?确定。创建一个方法也应该有效。但我想知道的是,在shell脚本中有一种标准的方法来处理这个问题。这也是一个很好的技巧,我一直在寻找。多谢了。这也是一个很好的技巧,我一直在寻找。谢谢