成功すると、コマンド出力をパイプします。

成功すると、コマンド出力をパイプします。
INPUT_FILE=`ls -rt $MY_DIR/FILE.*.xml | head -1 | xargs basename`

head -1最初のコマンドが成功した場合にのみ2番目のcommand()を実行したいと思います。このコマンドをどのように改善できますか?

ベストアンサー1

この試み:

INPUT_FILE=`ls -rt "$MY_DIR"/FILE.*.xml | head -1 | xargs -r basename`

xargsこのフラグを渡すと、標準入力()から1つ以上の項目を読み取ったときにのみ実行されます-rbasenamehead -1

head -1実行されますが、出力は表示もキャプチャもされません。

または、ユーザーにエラー出力が表示されないようにするには、stderrストリームにリダイレクトlsできます。ls/dev/null

INPUT_FILE=`ls -rt "$MY_DIR"/FILE.*.xml 2> /dev/null | head -1 | xargs -r basename`

また、周囲に引用符を追加したことに注意してください$MY_DIR。これにより、スペースが含まれても$MY_DIRコマンドは失敗しません。

bashなどの最新のシェルを使用している場合は、$( )バックティックの代わりにキャプチャシェルを使用する必要があります。変数スタイルの変更も考慮する必要があります。通常、スクリプトで変数名をすべて大文字にすることは避けるべきです。このスタイルは通常、保持変数と環境変数用に予約されています。

input_file=$(ls -rt "$my_dir"/FILE.*.xml 2> /dev/null | head -1 | xargs -r basename)

おすすめ記事