おそらくこれは以前に回答されているので、別の回答へのリンクを歓迎します...
次のようなシェルコマンドを(bash
Shellで)実行すると、
make
次に、make
からの出力がSTDOUT
コマンドのmake
からスクロールしているときに、make check
を押して enter 最初のコマンドの実行が完了する前、make
コマンドが最後に次のコマンドを完了するときmake check
すぐにピックアップして実行します。
私の質問は単純です:
Unixは全二重であるため、これは同じように機能します。リッチーが言ったように NIXタイムシェアリングシステム:回顧展 :
些細なことのように思われるが、慣れると意外な違いを生むものの1つは、先読み付きの全二重端末I/Oです。プログラムは通常、1文字ではなく行でユーザーと通信しますが、全二重端末I/Oは、システムが入力し直している場合でも、文字を失ったり文字化けしたりすることを恐れずに、ユーザーがいつでも入力できることを意味します。 。先読みにより、すべての行への応答を待つ必要はありません。ドキュメントを入力する優れたタイピストは、新しい行を開始する前に一時停止する必要があることに非常に不満を感じます。自分が言いたいことを知っている人にとっては、情報を全速力ではなく少しずつ入力しなければならない場合、応答の遅さは心理的に拡大します。
[引用を終了]
とは言っても、先行入力を食べ尽くしたり破棄したりする最新のプログラムがいくつかあります。 ssh
および apt-get
は2つの例です。それらの実行中に先に入力すると、入力の最初の部分が消えていることに気付く場合があります。それはおそらく問題になるでしょう。
ssh remotehost do something that takes 20 seconds
mail bob
Dan has retired. Feel free to save any important files and then do
# ssh exits here, discarding the previous 2 lines
rm -fr *
.
あなたが見ている基本的な振る舞いは、入力が読み込まれるまでバッファのどこかに置かれていることです(まあ、十分に入力すると、最終的にはバッファがいっぱいになり、何かが失われますlot入力の)。 makeによって実行されるほとんどのものは、STDINから読み取られないため、バッファーに残ります。
危険は、間違ったコマンドが入力を読み取ることです。たとえば、make
は、プロンプトを表示することを決定する何かを呼び出します。その後、次のコマンドを応答として読み取る場合があります。もちろん、それがどれほど危険かはコマンドによって異なります。 (また、以前の入力を破棄するだけで、最初にすべての入力をフラッシュする場合もあります。)
Makefileで一般的に使用される1つのコマンドは、TeXです。エラーが発生した場合(およびユーザーにプロンプトを表示しないようにフラグが設定されていない場合)、続行する方法をプロンプトで表示します。
より良いオプションはおそらく実行することです:make && make check
。
make
)が正常に完了したことに依存する2番目のコマンドを実行するべきではありません。たとえば、make foo
Enter>./foo
Enter 問題が発生する可能性があります。最初のコマンドが成功した場合にのみ2番目のコマンドが実行されるmake && make check
のようなものを入力する習慣を身に付けたいと思うかもしれません。make check
の最初の6文字が食べられた場合は、コマンドheck
を実行することになります。最初のコマンドがあなたが知っていて信頼できる良性のものである場合、私はすぐには問題を見つけません。