前のコマンドがまだフォアグラウンドで実行されている間にコマンドを入力できるようにするにはどうすればよいですか?

前のコマンドがまだフォアグラウンドで実行されている間にコマンドを入力できるようにするにはどうすればよいですか?

場合によっては、プログラム(例A)がフォアグラウンドで実行され、その出力をstdoutとして印刷するときに別のコマンド(例:)を入力すると、そのコマンドを押すと実行されます。Bその時点からEnter入力するように求められず、BAまだ実行されていません。 tcshシェルでこれを行うことができ、最終結果BA

この機能を何と呼びますか?このシェルに固有のものはありますか?プロンプトでコマンドを入力しないとどうなりますか?

答え1

これは…事前に入力してください、これはシェルに限定されない。入力した内容は最終的に端末にバッファリングされ、次に端末で実行中のプログラムが入力準備ができたらバッファに待機している内容を読み込みます。あなたの例では、プログラムはシェルなので、A入力する前に完了するのを待つように入力したコマンドを実行します。

一部のプログラムは、入力を受け入れる前に明示的にバッファをクリアします。たとえば、パスワードを要求するほとんどのプログラムは、ユーザーが入力した内容を知るためにバッファを消去します(入力がエコーされないため)。

答え2

説明した内容は、実際にプログラムAがバックグラウンドで実行されているようです。プロセスがバックグラウンドで実行されていても、まだ端末に印刷できます。

バッシュの例:

#----background_program----#
#!/bin/bash

for ((i=0;i<=10;i++)); do
    echo "$i"
    sleep 5
done

exit 0

バックグラウンドで実行し、端末で出力ポップアップを表示できます。最初の出力メッセージの後、カーソルはプロンプトの外に移動します。その後background_program、実行中にフォアグラウンドで他のコマンドを実行できます。

./background_program &     # '&' to put in background
echo "wut"
echo "foo"
echo "bar"

これにより、次の内容が提供されます。

sandbox@Dionysus:~$ ./background_program &
[1] 6197
sandbox@Dionysus:~$ 0
echo "wut"
wut
sandbox@Dionysus:~$ 1
echo "foo"
foo
sandbox@Dionysus:~$ 2
echo "bar"
bar
sandbox@Dionysus:~$ 3
4
5
6
7
8
9
10

gnome端末でこれを行いましたが、これらの動作は珍しいことではないと思います。

プログラムAを前景で実行する場合、@Stephenが言った内容をあらかじめ入力して取得できます。コマンドがバッファにロードされ、プログラムAが完了した後に解釈されると、プログラムは実行されません。

関連情報