我意外遇到了一个
在一个交互式的
- 我的交互式 bash shell 进程 (
然而,如果我
-
这里发生了什么?
现在来回答我的问题:有没有办法强制中间的 shell 进程存在,无论传递给
(我可以在实际命令后面添加类似于
(编辑:在
bash
/sh
行为,想知道其中的道理和提供下面问题的解决方案。在一个交互式的
bash
shell 会话中,我执行:
$ bash -c 'sleep 10 && echo'
在 Linux 上使用 ps
命令,看起来像这样:
\_ -bash
\_ bash -c sleep 10 && echo
\_ sleep 10
进程树是我所期望的:- 我的交互式 bash shell 进程 (
$
)
- 一个子 shell 进程 (bash -c ...
)
- 一个 sleep 子进程然而,如果我
bash -c
的命令部分是一个single 命令,例如:
$ bash -c 'sleep 10'
那么中间的子 shell 就被忽略了,我的交互式终端会话直接执行 sleep 作为子进程。进程树看起来像这样:
\_ -bash
\_ sleep 10
因此,从进程树的角度来看,这两个命令产生相同的结果:-
$ bash -c 'sleep 10'
- $ sleep 10
这里发生了什么?
现在来回答我的问题:有没有办法强制中间的 shell 进程存在,无论传递给
bash -c ...
的表达式的复杂性如何?(我可以在实际命令后面添加类似于
; echo;
这样的内容,这样做“有效”,但我宁愿不这样做。有没有更好的方法来强制中间进程的存在?)(编辑:在
ps
输出中有一个打字错误;如评论中建议,删除了 sh
标记;还有一个打字错误)
\_ bash -c sleep 10 && echo
而不是\_ bash -c sleep 10 && sleep 10
? - codeforester