区切り記号と手続き型置換の違いは何ですか?

区切り記号と手続き型置換の違いは何ですか?

この回答では、インタラクティブプログラムの標準入力を区切り文字に関連付けて、区切り文字を使用してインタラクティブプログラムと対話する方法について説明します。

https://stackoverflow.com/questions/21130757/send-commands-to-socket-using-netcat

「あファイル!」と思ったので、プロセス交換が使えます!

だから私は次のことを試しました。

nc -lvkp 8000 <(echo "test")

その後、エラーが発生しました。

Ncat: Could not resolve hostname "/dev/fd/63

それではファイルですね!しかし、netcatはそれを理解していません(私が書いた一般的なファイルではそれを理解しています/tmp/commands.txt)。 netcatがそれを理解していない場合、私は本当に気にしません。

私が本当に心に留めておくのは、私が正しく理解したなら、heredocも一時ファイルだと思うということです。しかし、明らかにnetcatはこれを理解しています。したがって、これと区切り記号/dev/fd/63の間に違いがなければなりません。

では、違いは何ですか?

私はその一部が/dev/fd/63永久的ではないか、部分dev/fd的に異なると思います。そこで、区切り記号がそこではなく他の場所に保存されていると思いました。

編集:はecho "test"「印刷単語テスト」を意味します。

ベストアンサー1

ここの文書は標準リダイレクト、プロセス置換は標準ではありませんが(したがって、すべてのシェルがそれをサポートしているわけではありません)、リダイレクトではありません。

明示的なプロセスの置き換え注文の実行特定のパス名から読み取ることができ、ここに文書化された出力を生成します。テキストファイルの作成すぐにリダイレクトしてください。ここのドキュメント可能これは一時ファイルに書き込むことで行うことができますが、名前付きパイプや同様のエントリに書き込むことでもできます。

呼び出しは、ncプロセス置換結果を標準入力ストリームに渡すのではなく、ncコマンドラインのファイル名として渡します。echoプロセス置換を使用して標準入力の出力を渡すには、次のようにします。

nc -lvkp 8000 < <( echo "test" )

<最初のパスがプロセスオーバーライドによって生成されたパス名からどのようにリダイレクトされるかを確認してください。

この文書を使用して作成します。

nc -lvkp 8000 <<'END'
test
END

ここでは、特定のパス名を参照せずにリダイレクトを実行する方法に注意してください。また、echoリダイレクトされた文書のテキストを生成するためにそのコマンドを使用しない方法にも注意してください。

おすすめ記事