次のコマンドを考えてみましょう:
ls /mydir/*.txt | xargs chown root
目的は、すべてのテキストファイルの所有者をmydir
ルートに変更することです。
.txt
問題は、そこにファイルがない場合mydir
、xargs がパスが指定されていないというエラーを表示することです。これはエラーがスローされるため無害な例ですが、ここで使用するスクリプトのように、空のパスが現在のディレクトリであると想定される場合もあります。そのため、そのコマンドを/home/tom/
then から実行すると、結果が表示されずls /mydir/*.txt
、その下のすべてのファイル/home/tom/
の所有者が root に変更されます。
では、xargs に空の結果を無視させるにはどうすればよいでしょうか?
ベストアンサー1
GNU の場合、またはオプションをxargs
使用できます。-r
--no-run-if-empty
--no-run-if-empty
-r
標準入力に空白以外の文字が含まれていない場合は、コマンドを実行しません。通常、入力がない場合でもコマンドは 1 回実行されます。このオプションは GNU 拡張機能です。
macOS で使用される のBSD バージョンではxargs
、入力が空の場合にコマンドは実行されないため、-r
オプションは必要ありません ( のそのバージョンでは受け入れられませんxargs
)。