不想遛狗或者 SO 了,当一回伸手党吧
原来是希望能让一个输出两次, tee 比较适合做这个 比如
echo 1 | tee /dev/stdout
1
1
然后希望能够 pipe 下去,初看很美好
echo 1 | tee /dev/stdout | cat
1
1
但后来发现,实际被 pipeline 的不是一个输出,而是两个输出同时被 pipline ,比如
echo 1 | tee /dev/stdout | tr 1 2
2
2
我希望能输出 1 和 2
然后我试了下用 /dev/console
,结果失败了
echo 1 > /dev/console
Σ<(っ =°Д °)っ 啥也没输出
看来是没戏了
谁能告诉我 /dev/console
或者 tee
的正确使用姿势?
或者这类需求有什么其它更好的简单解决方案
1
fcicq 2016-06-24 23:13:27 +08:00
第一问 sed 'p' 或者 sed -n 'p;p'
后面 tr 肯定也能用 sed 实现. |
2
SoloCompany OP @fcicq 我知道 sed 可以实现啊,但我只是举个栗子,我真是的需求是希望 pipeline 中途可以旁路输出内容(但不是写到文件里面,我知道 tee 可以干这个),然后同时继续后面的 pipeline
|
3
jybox 2016-06-24 23:16:15 +08:00
/dev/stdout 是对于「当前程序」而言的(而不是当前 Shell ),在你的第三段代码里,是 tee 在往 stdout 写数据,所以数据是被写到 tee 的标准输出的,所以会被 pipe 到 tr.
|
4
fcicq 2016-06-24 23:16:27 +08:00
@SoloCompany 那可能只能 mkfifo 然后组装了.
|
5
SoloCompany OP @fcicq 就是觉得很复杂想看看有没有简单解决方案,因为 tee 写到临时文件也是可以解决的,而且应该比 mkfifo 要简单一些
|
6
SoloCompany OP 可能我这个本身就是不合理需求吧
pipeline 旁路应该是不能使用同一个管道的 即使可以的话,多个管道进程输出可能也会导致输出的内容发生交叉 也许只能有临时文件一种途径了 |
7
billlee 2016-06-24 23:36:07 +08:00 1
Process Substitution:
echo 1 | tee >(tr 1 2) |
8
SoloCompany OP @billlee 蟹蟹!!
|
9
rrfeng 2016-06-25 01:50:12 +08:00
💀
$ echo 1 | tee /dev/stderr | tr 1 2 1 2 |
10
rrfeng 2016-06-25 01:51:57 +08:00
$ echo 1 | tee /dev/stderr | tr 1 2 2>&1
|
11
SoloCompany OP @rrfeng 你这是取巧,而且 pipeline 不能继续往下传递了,前面的答案才是正解,不过还是蟹蟹
|