コマンドにはファイルパスが必要です。 stdin "infile"とstdout "outfile"をどのように提供できますか?

コマンドにはファイルパスが必要です。 stdin

foo -in /path/to/infile -out /path/to/outfile一時ファイルを使用する代わりに、文字列を渡したいこのようなコマンドを検討してください。多くの場合、多くのディスクアクセスが発生したり、暗号化に関連して機密データをディスクに書き込む(または暗号化および/またはRAMディスクなどを処理したくない)場合があります。

できる方法はありますか?標準入力そして出力を得なさい標準出力
まるでecho "abc" | foo -in &0 -out &1

データをリダイレクトできるファイル記述子があることがわかります(たとえば、文字列をパラメータとして渡すことができるものなどecho "foo" 1>&2)。xargsしかし、標準のファイル記述子をファイルパスに渡す方法はありますか? stdin / outをファイルに読み書きできますが、なぜ「仮想」ファイルパスを取得できないのですか?

ベストアンサー1

/dev/stdin特殊ファイルを使用したり、/dev/fd/0stdinおよび/dev/stdout/または/dev/fd/1stdoutに使用できます。

あなたの例では:

echo "abc" | foo -in /dev/fd/0 -out /dev/fd/1

これらの特殊ファイルの可用性は、使用しているオペレーティングシステムによって異なりますが、Linux(およびほとんどのLinuxディストリビューション)ではそのファイルの検索または使用に問題はありません。

これらのファイルは、そのいずれかに書き込んでもデータがディスクに書き込まれないという点で「仮想」です。これらの特殊ファイルの1つを開くことは、次のものを呼び出すのと同じです。繰り返し(2)既存のファイル記述子を新しいファイル記述子にコピーするシステムコール。

おすすめ記事