1

皆さん、私は今日の午後、この奇妙な問題を発見しました (おそらくそれは機能です)。現在の作業ディレクトリには、a、b、c、d、e の 5 つのファイルがあります。

次のコマンドを発行すると

echo "a" | ls -l

私が期待しているのは、ファイル a の詳細情報のみがリストされていることです。しかし、出力から、ファイル a、b、c、d、e の詳細情報がリストされます。パイプの前のコマンドが機能していないようです。たとえば、次のコマンドは、ls -l実行されたかのように正確に出力されます。

echo "whatever_you_type" | ls -l

私は混乱しています。この問題を説明できる人はいますか? を使用してこの問題を回避できることはわかっています が、理由を知りたいですxargsecho "a" | xargs ls -l

4

2 に答える 2

9

何かを別のプロセスにパイプすると、そのSTDINストリームにプッシュされます。ls は stdin から読み取らないため、それを無視します。必要なのは、パラメータが のコマンド ラインに渡されることですls。これは、次のようなものを使用して実現できます。

my_file="a"
ls -l "$my_file"

または、stdin 入力からコマンド ライン パラメーターを作成するために使用できるxargsを使用することもできます。あなたの場合、次のように使用できます

echo "a" | xargs ls -l

ls -l [filename]stdin 入力のスペースで区切られた文字列ごとに実行されます。

于 2012-05-09T09:03:00.687 に答える
3

lsからの入力は受け付けませんstdin。入力から組み立てられた引数を使用して 1 回以上xargs呼び出すため、機能します。lsあなたの例を実現する別の方法は次のとおりです。

ls -l $(echo "a")

ファイル名にスペースが含まれていないことを確認してください。

于 2012-05-09T08:59:57.027 に答える