在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
我有几个这样的命令 - 我想知道是否有一种有效的方法可以在屏幕上显示时附加日志和/或附加到日志。
或者我是否必须在每一行修改和拨打电话?
用户将无法修改此脚本。
答案 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?的答案中挑选部分 - 来自安东尼的帖子。