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

pje*_*pje 5 ruby unix bash shell pipeline

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

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

echo { 1, 2, 3 } |
  tr ' ' '\n' |
  sort |
  tap 'xargs echo' | # arbitrary code, but implicitly return the input
  uniq
Run Code Online (Sandbox Code Playgroud)

我来自Ruby,在那里我会这样做:

[ 1, 2, 3 ].
  sort.
  tap { |x| puts x }.
  uniq
Run Code Online (Sandbox Code Playgroud)

che*_*ner 6

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

echo 1 2 3 | tr ' ' '\n' | sort | tee >( **code** ) | uniq
Run Code Online (Sandbox Code Playgroud)

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