如何将多个命令从shell脚本记录到日志文件中

时间:2016-02-18 17:49:26

标签: bash shell scripting ksh

在shell文件中有几个命令,我想记录并在屏幕上显示。但有些命令结果我想不在屏幕上显示,有些我想要 - 但所有这些都需要记录。

我可以使用tee或>或>>等等。

script.sh | tee -a logfile

但这不允许我挑选和选择屏幕上显示的内容以及日志中的内容。

示例脚本 - 我现在拥有的(每行不同,看起来效率低下)

echo "setting date" | tee log.txt #show on screen and log
`date` | tee -a log.txt # screen and log
echo "setting name" | tee -a log.txt #show on screen  
`who am i` >> log.txt | only log

我有几个这样的命令 - 我想知道是否有一种有效的方法可以在屏幕上显示时附加日志和/或附加到日志。

或者我是否必须在每一行修改和拨打电话?

用户将无法修改此脚本。

2 个答案:

答案 0 :(得分:0)

如果您不想告诉每个命令您喜欢哪个,请确定您想要在大多数时间使用的内容。是tee吗?试试这个:

function doit {
   echo "Normal (both)"
   # Some more commands without explicit rediection for both strout and logfile
   echo "only stdout" >&3
   echo "Only logfile" >> $0.log
}
exec 3>&1
echo " === Screen output"
doit | tee -a $0.log
echo " === Content file"
cat $0.log

输出

=== Screen output
only stdout
Normal (both)
 === Content file
Only logfile
Normal (both)

答案 1 :(得分:0)

感谢您的回复。经过大量的额外研究 - 我决定从How do I write stderr to a file while using "tee" with a pipe?的答案中挑选部分 - 来自安东尼的帖子。