首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash管道输出到多个进程

bash管道输出到多个进程
EN

Stack Overflow用户
提问于 2015-10-20 03:07:37
回答 7查看 242关注 0票数 3

bash管道问题

我看到过类似的问题和答案,但我问的是将输出输送到多个进程的最基本的情况。例如,我想将财富输出到cowsay和(espeak &)。我有一个解决方案(如下),但必须有一个更简单,更优雅的方式。

joshua@joshua-HP-Pavilion-dv8-笔记本电脑~$ cat .bashrc

代码语言:javascript
复制
(fortune -a > ~/tmp) && echo && (cat ~/tmp |cowsay -W65) && (cat ~/tmp | espeak &)
rm ~/tmp

输出:

代码语言:javascript
复制
  ___________________________________________
/ 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。为什么我不能这样做,例如:

代码语言:javascript
复制
fortune -a | (cowsay -W70 && espeak &)

?我尝试过很多变种,下面是我的尝试历史:

代码语言:javascript
复制
  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

此外,这也是我第一次尝试发布问题。欢迎有建设性的反馈!

EN

回答 7

Stack Overflow用户

发布于 2015-10-20 03:37:02

您可以将tee与进程替换结合使用。

代码语言:javascript
复制
fortune -a | tee >(cowsay -W65) >(espeak)
票数 2
EN

Stack Overflow用户

发布于 2015-10-20 03:25:53

为什么不调用fortune -a once并将其结果存储在变量中?

代码语言:javascript
复制
# 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"
票数 1
EN

Stack Overflow用户

发布于 2015-10-20 03:30:41

首先,这个问题值得称赞,我很高兴你在来这里提问之前尝试了。当我看到输出结果时,我得到了很多乐趣:) - Upvoted。

到目前为止,我的最好结果是(我认为比你的要简单得多)

代码语言:javascript
复制
fortune -a > a.txt | cowsay && espeak -f a.txt && rm a.txt 

我使用的逻辑是:

  • 将财富转移到文件
  • 将结果通过管道传输到cowsay & espeak
  • 删除文件。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33222015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档