如果我调用某个命令,例如,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.
保持结果为了这一点很重要,这意味着输出的线路command1,command2并且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) 我正在寻找一个“元命令”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 解决方案也是可以接受的。