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
詳細より。