bash管道问题
我看到过类似的问题和答案,但我问的是将输出输送到多个进程的最基本的情况。例如,我想将财富输出到cowsay和(espeak &)。我有一个解决方案(如下),但必须有一个更简单,更优雅的方式。
joshua@joshua-HP-Pavilion-dv8-笔记本电脑~$ cat .bashrc
(fortune -a > ~/tmp) && echo && (cat ~/tmp |cowsay -W65) && (cat ~/tmp | espeak &)
rm ~/tmp输出:
___________________________________________
/ I ain't got no quarrel with them Viet Congs. \
| |
\ -- Muhammad Ali /
----------------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
joshua@joshua-HP-Pavilion-dv8-Notebook-PC ~ $ 加上作为后台进程运行的espeak的音频(| espeak &)。我的解决方案将输出重定向到一个文件( ~/tmp ),执行操作,然后删除~/tmp。为什么我不能这样做,例如:
fortune -a | (cowsay -W70 && espeak &)?我尝试过很多变种,下面是我的尝试历史:
501 fortune -a | (cowsay -W70 && espeak &)
502 fortune -a | (cowsay -W70 && espeak)
503 fortune -a | (cowsay -W70 | espeak)
504 fortune -a | (cowsay -W70; espeak)
505 fortune -a | (espeak | cowsay -W70; espeak)
506 fortune -a | (espeak | cowsay -W70)
507 fortune -a | (espeak & | cowsay -W70)
508 fortune -a | (espeak & && cowsay -W70)
509 fortune -a | (espeak && cowsay -W70)
510 fortune -a | (espeak && cowsay -W70)
511 (fortune |cowsay -W65) && (cat ~/tmp | espeak &)
512 (fortune |cowsay -W65) && ( espeak &)
513 (fortune |cowsay -W65) && espeak &
514 fortune | (cowsay -W65 && espeak &)
515 history此外,这也是我第一次尝试发布问题。欢迎有建设性的反馈!
发布于 2015-10-20 03:37:02
您可以将tee与进程替换结合使用。
fortune -a | tee >(cowsay -W65) >(espeak)发布于 2015-10-20 03:25:53
为什么不调用fortune -a once并将其结果存储在变量中?
# Store "fortune" output in a variable
fortune_result=$(fortune -a)
# Use that variable as input for multiple processes
(cowsay -W70 && espeak &) <<< "$fortune_result"
(cowsay -W70 && espeak) <<< "$fortune_result"
(cowsay -W70 | espeak) <<< "$fortune_result"发布于 2015-10-20 03:30:41
首先,这个问题值得称赞,我很高兴你在来这里提问之前尝试了。当我看到输出结果时,我得到了很多乐趣:) - Upvoted。
到目前为止,我的最好结果是(我认为比你的要简单得多)
fortune -a > a.txt | cowsay && espeak -f a.txt && rm a.txt 我使用的逻辑是:
https://stackoverflow.com/questions/33222015
复制相似问题