
不想遛狗或者 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 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 不能继续往下传递了,前面的答案才是正解,不过还是蟹蟹 |