【发布时间】:2018-09-04 01:31:40
【问题描述】:
我无法理解这个命令序列:
[me@mine ~]$ (echo 'test'; cat) | bash
echo $?
1
echo 'this is the new shell'
this is the new shell
exit
[me@mine ~]$
据我所知,情况如下:
- 管道已创建。
-
echo 'test'的标准输出被发送到管道。 - bash 在标准输入上收到“测试”。
-
echo $?返回 1,这是在不带参数的情况下运行test时发生的情况。
-
-
cat运行。- 它正在将标准输入复制到标准输出。
- stdout 被发送到管道。
-
bash将执行您输入的任何内容,但 stderr 不会打印到屏幕上(我们使用的是|,而不是|&)。
我有三个问题:
看起来,即使我们运行两个命令,我们对这两个命令都使用相同的管道和bash 进程。是这样吗?
提示在哪里?
当cat之类的东西使用stdin时,只要shell运行,它就拥有stdin的独占所有权,还是其他东西可以使用它?
我怀疑我错过了 ttys 的一些细节,但我不确定。任何帮助或细节或man 摘录表示赞赏!
【问题讨论】: