我想重定向shell脚本的所有输出的副本,在脚本中有一些mount命令和一些echo。
如果我使用>> 2>&1
,我无法从命令行看到输出
如果我使用| tee -a the_log_file 2>&1
,我可以在命令行中获取所有输出,但是在the_log_file中,没有安装错误输出,例如mount.nfs: /mnt/folder is busy or already mounted
,我也想要the_log_file
我该如何解决这个问题?
答案 0 :(得分:4)
你需要使用
command 2>&1 | tee -a the_log_file
而不是
command | tee -a the_log_file 2>&1
(如果你问我,你不需要将2>&1
放在管道套管中的非直观位置,这非常不直观!))
有关详细信息,请参阅 Bash Hackers Wiki 中的 Illustrated Redirection Tutorial 。 复制文件描述符2>& 1 部分中的插图显示了我们的案例:
ls /tmp/ doesnotexist 2>&1 | less
--- +--------------+ --- +--------------+
( 0 ) ---->| /dev/pts/5 | ------> ( 0 ) ---->|from the pipe |
--- +--------------+ / ---> --- +--------------+
/ /
--- +--------------+ / / --- +--------------+
( 1 ) ---->| to the pipe | / / ( 1 ) ---->| /dev/pts |
--- +--------------+ / --- +--------------+
/
--- +--------------+ / --- +--------------+
( 2 ) ---->| to the pipe | / ( 2 ) ---->| /dev/pts/ |
--- +--------------+ --- +--------------+