質問
の使い方を理解したい xargs man
で ランピオンのコード:
screen -t man /bin/sh -c 'xargs man || read'
ランピオンのおかげで:猫は必要ありません!
なぜ必要なのか xargs
コマンドで?
わかりました xargs
-部分は以下の通り
- 猫は xargs に何もしない
- xargs は man コマンドのリストを作成します
xargs がコマンドのリストを作成するというアイデアがありました。例えば、
find . -type f -print0 | xargs -0 grep masi
コマンドのリストと同じです。
find fileA AND grep masi in it
find fileB AND grep masi in it
and so on for fileC, fileD, ...
解決
いいえ、私は何もcat
ません。私は、コマンドを実行した後、私が得るものは何でも入力私は猫。 cat
がここに実際に余分なので、のは、それを無視せます。
xargs man
は、ユーザ入力に待機します。これは必要です。スクリプトで、あなたがそこからつかんだので、私は、ウィンドウを作成した後まで、男性のための引数に貼り付けることはできません。だから、ウィンドウ内で実行するコマンドは、私はそれに何かを与えるためにそれが男を実行しようとする前に、待機する必要があります。
screen /bin/sh -d 'man || read'
を実行した場合は、、それは常に「あなたは何のマニュアルページをしたいですか?」文句を言うでしょう我々はそれを話したことがないからです。
他のヒント
xargsが標準入力から引数を収集し、それらの引数で指定されたコマンドを実行します。
猫を入力するために何かを待っている、その後、xargsのは、その入力で男を実行している。そう
xargsのあなたが処理するために、たくさんのファイルを持っている場合、私は多くの場合、検索からの出力とそれを使う便利です。
xargsがコマンドライン上にできるだけ多くの引数それができるように詰め込むます。
これは、
find . -name '*.o' -print | xargs rm
cat
コマンドは何も上では動作しません。入力が終了したことを告げられたアップまで、標準入力で動作します。ホタルブクロのメモとして、cat
コマンドはここでは必要ありませんが、それはその暗黙の入力(標準入力)で、何もない上で動作してます。
xargs
コマンドは、(のみ)引数として指定cat
コマンドの引数に情報をman
からの出力を読み込み、グループ。それは(コマンドラインで設定可能)限界に到達すると、それはman
コマンドを実行します。
find ... -print0 | xargs -0 ...
イディオムは、空白、タブ、改行など厄介な文字を含むファイル名を扱います。 find
コマンド印刷ASCII NUL('\0'
)、続いて各ファイル名。その他は「/」は(パス名では、もちろん、ではなく、単純なファイル名で表示されます) - これは、単純なファイル名で表示することはできません2つの文字の一つです。それはあなたが提供するシーケンスに直接等価ではありません。サイズ制限までの単一引数リストにファイル名のxargs
グループのコレクション、。名前は(彼らは通常は)十分に短い場合は、ファイル名があるよりも、grep
の少ない処刑があるでしょう。
メモは、あまりにも、grep
は、それが検索する複数のファイルを持っている場合は材料が発見されたファイル名印刷します - またはそれはオプションをサポートしている場合、それは常にファイル名を印刷し、オプションが使用されるように: 「-H
は、」これを行いgrep
にGNUの拡張です。ファイル名が常に表示されていることを確実にするポータブルな方法は、最初のファイル(そう「/dev/null
」)としてxargs grep something /dev/null
をリストすることです。それは/dev/null
を検索するために時間はかかりません。