Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何轻松地将shell脚本中的所有echo语句放入日志文件_Linux_Bash_Shell_Sh - Fatal编程技术网

Linux 如何轻松地将shell脚本中的所有echo语句放入日志文件

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

我有一个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
问题:
是否有一条语句可以说明所有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脚本中有一种标准的方法来处理这个问题。这也是一个很好的技巧,我一直在寻找。多谢了。这也是一个很好的技巧,我一直在寻找。谢谢