管道多个命令进行bash,管道行为问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管道多个命令进行bash,管道行为问题相关的知识,希望对你有一定的参考价值。
我有这个命令序列,我无法理解:
[me@mine ~]$ (echo 'test'; cat) | bash
echo $?
1
echo 'this is the new shell'
this is the new shell
exit
[me@mine ~]$
据我所知,这是发生的事情:
- 管道已创建。
echo 'test'
的stdout被发送到管道。- bash在stdin上收到'test'。
echo $?
返回1,这是当你运行没有args的test
时会发生的事情。 cat
跑。 它正在将stdin复制到stdout。 stdout被发送到管道。bash
会执行你输入的任何内容,但是stderr不会被打印到屏幕上(我们使用的是|
,而不是|&
)。
我有三个问题:
看起来,即使我们运行两个命令,我们对两个命令使用相同的管道和bash
进程。是这样的吗?
提示在哪里?
当cat之类的东西使用stdin时,只要shell运行,或者其他东西可以使用它,它是否需要stdin的独占所有权?
我怀疑我错过了ttys的一些细节,但我不确定。任何帮助或细节或man
摘录赞赏!
答案
所以...
- 是的,有一个管道向
bash
的单个实例发送命令。注意:$ echo 'date "+%T hello $$"; sleep 1; date "+%T world $$"' | bash 22:18:52 hello 72628 22:18:53 world 72628
- 没有提示。从手册页: 交互式shell是在没有非选项参数的情况下启动的(除非指定了-s)并且没有-c选项,其标准输入和错误都连接到终端。如果bash是交互式的,PS1已设置且$ - 包括i。 因此管道不是交互式shell,因此没有提示。
- Stdin和stdout一次只能连接一件事。
cat
将从运行它的进程中获取stdin(例如,您的交互式shell)并将其stdout通过管道发送到bash
。如果您需要多个东西能够提交到该cat
的标准输入,请考虑使用命名管道。
这涵盖了吗?
以上是关于管道多个命令进行bash,管道行为问题的主要内容,如果未能解决你的问题,请参考以下文章
Linux shell Bash的基本功能3 多命令与管道符