リダイレクトパラメータのシェル構文ですか?

リダイレクトパラメータのシェル構文ですか?

stdioをリダイレクトせずにプログラムの出力を引数にリダイレクトするには、xargsを使用する必要がありますか?

たとえば、lsファイル名が入力ストリームではなく次のコマンドの引数になりたいとします。

私が言う内容の良い例はありますか?この例は表面的ですが、出力をlsパラメータとして使用してcatファイルの内容を表示することを意味します。

答え1

まず、するいいえ分析するls。ファイル名を取得する信頼できる方法はたくさんありますが、lsはいいいえそれらの一つ

以下は、シェルのグロービングを使用してファイル名を生成し、nullで区切られたファイル名のリストをxargs実行するファイル名に渡しますcat

printf '%s\0' * | xargs -0 cat

私はこれの目的がファイル-> xargsを示すことであることを知っています。もちろん、そうでなければ、コマンドラインに入るファイルが多すぎない限り、上記の内容を次のように置き換えることができます。

cat *

より選択的

ls両方ともprintf '%s\0' *、サブディレクトリを含むディレクトリの全内容を表示します。たとえば、通常のファイルは含まれていますが、サブディレクトリは含まれていないなど、オプションの場合、CASで提案されているように、より良いツールは次のfindとおりです。

find . -maxdepth 1 -type f -print0 | xargs -0 cat

または:

find . -maxdepth 1 -type f -exec cat {} +

find便利なオプションがたくさんあります。man find詳細より。

関連情報