相关疑难解决方法(0)

tee + cat:多次使用输出,然后连接结果

如果我调用某个命令,例如,echo我可以在其他几个命令中使用该命令的结果tee。例子:

echo "Hello world!" | tee >(command1) >(command2) >(command3)
Run Code Online (Sandbox Code Playgroud)

使用 cat 我可以收集几个命令的结果。例子:

cat <(command1) <(command2) <(command3)
Run Code Online (Sandbox Code Playgroud)

我希望能够同时做这两件事,这样我就可以tee在其他东西的输出上调用这些命令(例如echo我写的),然后在一个输出上收集所有结果cat.

保持结果为了这一点很重要,这意味着输出的线路command1command2并且command3不应该纠缠在一起,但订购的命令是(因为它与发生cat)。

可能有比cat和更好的选择,tee但这些是我目前所知道的。

我想避免使用临时文件,因为输入和输出的大小可能很大。

我怎么能这样做?

PD:另一个问题是这种情况发生在循环中,这使得处理临时文件变得更加困难。这是我拥有的当前代码,它适用于小型测试用例,但是在以某种我不理解的方式从 auxfile 读取和写入时,它会创建无限循环。

somefunction()
{
  if [ $1 -eq 1 ]
  then
    echo "Hello world!"
  else
    somefunction $(( $1 - 1 )) > auxfile
    cat <(command1 < auxfile) \
        <(command2 < auxfile) \
        <(command3 < auxfile)
  fi …
Run Code Online (Sandbox Code Playgroud)

pipe concurrency cat tee

19
推荐指数
1
解决办法
8850
查看次数

向前然后向后输出每一行的命令

我正在寻找一个“元命令”xyz,这样:

(echo "foo"; echo "bar") | xyz rev
Run Code Online (Sandbox Code Playgroud)

将返回:

foo oof
bar rab
Run Code Online (Sandbox Code Playgroud)

我想避免使用临时文件,即我正在寻找比以下更简洁的解决方案:

tempfile=$(mktemp)
cat > $tempfile
cat $tempfile | rev | paste $tempfile -
Run Code Online (Sandbox Code Playgroud)

(当然,我想要一个通用的解决方案,对于任何命令,不仅仅是rev,您可以假设该命令为每个输入行只输出一行。)

Zsh 解决方案也是可以接受的。

linux bash zsh io-redirection

6
推荐指数
2
解决办法
455
查看次数

标签 统计

bash ×1

cat ×1

concurrency ×1

io-redirection ×1

linux ×1

pipe ×1

tee ×1

zsh ×1