コマンドライン引数と標準入力には違いがあります。パイプは、あるプロセスの標準出力を別のプロセスの標準入力に接続します。そう
ls | echo
lsの標準出力をechoの標準入力に接続します。いいね?まあ、エコーは標準入力を無視し、コマンドライン引数をダンプします-この場合はありません-それ自身の標準出力。出力:何もありません。
この場合、いくつかの解決策があります。1つは、標準入力を読み取り、標準出力にダンプするコマンド(catなど)を使用することです。
ls | cat
あなたの仕事の定義に応じて、「働く」でしょう。
しかし、一般的なケースはどうでしょう。本当に欲しいのは、あるコマンドの標準出力を別のコマンドのコマンドライン引数に変換することです。他の人が言ったように、xargs
この場合の標準的なヘルパーツールは、stdinからコマンドのコマンドライン引数を読み取り、実行するコマンドを構築します。
ls | xargs echo
置換コマンドを使用して、これを変換することもできます $()
echo $(ls)
また、あなたが望むことをします。
これらのツールはどちらもシェルスクリプトの核となるものなので、両方を学ぶ必要があります。
完全を期すために、質問で示したように、stdinをコマンドライン引数に変換するもう1つの基本的な方法は、シェルの組み込みread
コマンドです。「単語」(IFS
変数で定義された単語)を一時変数に変換します。これは、任意のコマンド実行で使用できます。
ls | echo
つもりですか?なぜ単に実行しないのls
ですか?