用于Unix命令管道的惯用语模拟Ruby的'Object#tap`?

时间:2012-09-22 16:39:33

标签: ruby bash shell unix pipeline

对于Unix命令管道,是否存在Ruby的Object#tap惯用语?

用例:在一个管道中我想为其副作用执行命令但是隐式返回输入以便不破坏管道的链接。例如:

echo { 1, 2, 3 } |
  tr ' ' '\n' |
  sort |
  tap 'xargs echo' | # arbitrary code, but implicitly return the input
  uniq

我来自Ruby,我会这样做:

[ 1, 2, 3 ].
  sort.
  tap { |x| puts x }.
  uniq

1 个答案:

答案 0 :(得分:6)

tee命令类似;它将其输入写入标准输出以及一个或多个文件。如果该文件是流程替换,我相信你会得到相同的效果。

echo 1 2 3 | tr ' ' '\n' | sort | tee >( **code** ) | uniq

流程替换中的代码将从其标准输入读取,这应该与uniq的调用最终看到的相同。