前のコマンドがSTDOUTに書き込まれている間、STDINに別のコマンドを入力しても安全ですか?

前のコマンドがSTDOUTに書き込まれている間、STDINに別のコマンドを入力しても安全ですか?

おそらく、この質問は以前に答えられたことがあります。他の答えへのリンクを歓迎します...

bash次のように(シェルから)シェルコマンドを実行すると:

make

その後、コマンドの出力がコマンドmakeの前でスクロールされ、最初のコマンドの実行が完了する前に入力され、押すと、コマンドが最終的に完了するとすぐに次のコマンドが開始され、実行されます。STDOUTmakemake checkentermakemake check

私の質問は簡単です。

  1. これは危険ですか?
  2. このように急いで入力すると、予期しない動作が発生しますか?
  3. なぜこれが起こるのですか?

ベストアンサー1

このように動作する理由は、Unixが全二重であるからです。金持ちが言うようにUNIX時分割システム:レビュー:

慣れれば驚くべき違いを生み出す些細なことの一つは全二​​重ターミナルI/Oと先読みです。プログラムは通常、個々の文字ではなく行を介してユーザーと通信しますが、全二重端末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 *
.

おすすめ記事