abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)
1
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)&
[1] 3297
abhigenie92@ubuntu:~$ 1
[1]+ Done ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )
バックグラウンドプロセスから始めるとどうなりますか?プロンプトが表示されずにを押す必要があるのはなぜですかEnter
?どちらの場合も、サブシェルを起動します。
答え1
あなた得るプロンプトを返す(コードブロックの5行目を参照) - そしてそれからあなたは出力を取得します。Enter3番目に入力しても、「シェルプロンプト」状態です。
理論的には、バックグラウンドプロセスが終了したときにプロンプトを再発行するようにシェルをプログラムできます。しかし、
- これは本当に役に立ちません。問題は、バックグラウンド操作が完了して端末に表示されると、カーソルが
echo 1
画面1
の左端に戻り、まだ「シェルプロンプト」にあるという事実があまり明確ではないことです。そして、フォアグラウンドシェルは、バックグラウンドジョブがいつ画面に書き込まれるかを知りません。 歴史的に、シェルはユーザーがいつであるかを知らなかった。タイプコマンドは、ユーザーが入力したときにのみ知ることができますEnter。 (場合によってはまだ可能です。)したがって、シェルは3番目のコマンドを入力するかどうかを知りません。
(sleep 3; echo someth
コマンドの入力中に新しいシェルプロンプトが表示されると、非常に混乱する可能性があります。