19

私は bash スクリプトを書いておりerrexit、コマンドが 0 の終了コードを返さない場合、つまりコマンドが正常に完了しない場合にスクリプトが停止するように設定しました。これは、私の bash スクリプトが堅牢であることを確認するためです。

いくつかのファイルシステムをマウントし、いくつかのファイルをコピーして、それをアンマウントする必要があります。umount /mnt/temp何かを行う前にアンマウントするように、最初に a を付けています。ただし、マウントされていない場合、umount は失敗し、スクリプトが停止します。

することは可能umount --dont-fail-if-not-mounted /mnt/tempですか?デバイスがマウントされていない場合は 0 を返すようにするには? のようにrm -f

4

4 に答える 4

42

リターン コードを無視する標準的な方法は、常に成功と評価されるブール式でコマンドをラップすることです。

umount .... || /bin/true
于 2009-09-04T10:09:46.433 に答える
8

デバイスがマウントされていないときに1を返すと仮定すると、次のumountように実行できます。

umount … || [ $? -eq 1 ]

次に、bashはumount0または1を返した場合(つまり、正常にアンマウントされるか、デバイスがマウントされていない場合)はエラーを想定しませんが、他のコードが返された場合(たとえば、デバイスをアンマウントする権限がない場合)はスクリプトを停止します。

于 2009-09-04T10:15:21.650 に答える
4

「:」の方が便利で、同様の解決策が必要であることがわかりましたが、スクリプトに何が起こっているかを知らせてください。

umount ...... || { echo "umount failed but not to worry" ; : ; } 

umount は失敗しましたが、これはメッセージとともに true を返します。

于 2012-06-26T11:57:57.243 に答える