grepが原因で「bash -e」スクリプトが早期に終了しないようにする

grepが原因で「bash -e」スクリプトが早期に終了しないようにする

スクリプトは出力されませんafter

#!/bin/bash -e

echo "before"

echo "anything" | grep e # it would if I searched for 'y' instead

echo "after"
exit

Shebang行からオプションを削除することでこの問題を解決できますが、-eスクリプトがエラー発生時に停止するようにしたいと思います。私はgrep一致するものを見つけるのがバグだとは思わない。突然終了するのをどのように防ぐことができますか?

ベストアンサー1

echo "anything" | { grep e || true; }

説明する:

  • エラーが発生します。
    $ echo "anything" | grep e
    $ echo $?
    1
    
  • これはエラーを引き起こさない
    $ echo "anything" | { grep e || true; }
    $ echo $?
    0
    
  • エラーを発生させないDopeGhotiの「no-op」trueバージョン
    $ echo "anything" | { grep e || :; }
    $ echo $?
    0
    

「または」という意味です||。コマンドの最初の部分が「失敗」すると(ゼロ以外のgrep e終了コードを返すことを意味します)、||実行後の部分は成功し、終了コードとして0を返します(true常に0が返されます)。

おすすめ記事