我正在运行一个带有tee log和xargs处理输出的find命令;由于疏忽,我在第二个管道中忘记添加xargs
,因此发现了这个问题。
示例:
% tree
.
├── a.sh
└── home
└── localdir
├── abc_3
├── abc_6
├── mydir_1
├── mydir_2
└── mydir_3
7 directories, 1 file
并且 a.sh
的内容是:
% cat a.sh
#!/bin/bash
LOG="/tmp/abc.log"
find home/localdir -name "mydir*" -type d -print | tee $LOG | echo
如果我添加第二个管道并附加命令,例如echo
或ls
,写入日志操作有时会失败。
以下是我多次运行./a.sh
的一些示例:
% bash -x ./a.sh; cat /tmp/abc.log // this tee failed
+ LOG=/tmp/abc.log
+ find home/localdir -name 'mydir*' -type d -print
+ tee /tmp/abc.log
+ echo
% bash -x ./a.sh; cat /tmp/abc.log // this tee ok
+ LOG=/tmp/abc.log
+ find home/localdir -name 'mydir*' -type d -print
+ tee /tmp/abc.log
+ echo
home/localdir/mydir_2 // this is cat /tmp/abc.log output
home/localdir/mydir_3
home/localdir/mydir_1
如果我添加了第二个管道并忘记使用xargs
命令,为什么tee
命令有时会失败呢?
sleep 1
替换echo
,但它可以写入文件。请看我的答案。 - Tanky Wooecho
替换为sleep 1
(它也不会从标准输入读取数据),一旦它完成,向其提供输入的进程将被内核发出信号并返回一个“broken pipe”消息。 - Luis Colorado