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つ以上の項目を読み取ったときにのみ実行されます-r
。basename
head -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)