私は新しいLinuxユーザーで、いくつかの実験をして理解しようとしています。プロセスの交換。私はこれについて基本的な理解を持っていると思います。ところが理由がわからない場合があります。 Ubuntu 20.04でBashを使用しています。
echo hi
hi
改行文字を含む文字列を標準出力に送信します。
root@u2004:~# echo hi | od -a
0000000 h i nl
0000003
root@u2004:~#
cat
パイプから標準入力を読み込み、読み取った内容をパイプに送ることができます。
root@u2004:~# echo hi | cat
hi
root@u2004:~# echo hi | cat | od -a
0000000 h i nl
0000003
root@u2004:~#
私が理解したように、コマンドは標準入力でも読み取られ、echo hi > >(cat)
コンソールcat
に印刷されます。ただし、実行すると、次のような結果が表示されます。
root@u2004:~# echo hi > >(cat)
root@u2004:~# hi
<the cursor blinks at this location>
Enterコマンドを完了するには、キーを押す必要があります。
root@u2004:~# echo hi >>(猫) root@u2004:~#こんにちは Enter ルート@u2004:~#
なぜこのような問題が発生しますか?コマンドをecho hi > >(cat)
正しく理解していますか?
答え1
問題なくコマンドが正常に完了しました。
あなたは何を見ることができますか?
root@u2004:~# echo hi > >(cat)
root@u2004:~# hi
<the cursor blinks at this location>
コマンドを入力してをクリックしましたEnter。シェルがプロンプトを出力した後、非同期的cat
に開始されたプロセスが完了して出力されますhi\n
。
空白行で点滅するカーソルは前の行のプロンプトに属しますが、echo
コマンドの改行文字のためにディスプレイがめちゃくちゃになります。
次に「Enterキーを押してください」を押すと、新しいメッセージが表示されます。命令を入力して Enter を押すと命令が実行されます。