bashスクリプトがumountから終了コードを受け取らないのはなぜですか?


4

実行するサーバーを管理するために長いbashスクリプトを作成しようとするのはこれが初めてであり、「set -ex」を使用すると、umountが失敗するとスクリプトが終了します。ifステートメントがキャッチすると思ったが、エコーが発生する前にスクリプトが終了する。

ここで見下ろしているのは何ですか?

umount $MOUNTPATH
if [[ $? -ne 0 ]];
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi

回答:


4

set -eコマンドが失敗するとすぐにシェルを終了します。つまり、unmountコマンドが終了するとすぐに。ifそれもに到達する前にスクリプトが終了するので、それをキャッチすることはできませんif。これを修正するには、unmountコマンド if条件に入れます(成功した場合ではなく、アンマウントが失敗した場合に句を!実行するように否定しthenます)。

if ! unmount $MOUNTPATH; then
    /bin/echo "Failed to unmount!  Already unmounted?"
fi

ああ、私もこれに気づきませんでした。ありがとうございました。
ジェフ

1

問題は、ifステートメントの後にセミコロンがあることです。

umount $MOUNTPATH
if [[ $? -ne 0 ]]
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi

それで修正されるはずです。

出典:http : //bash.cyberciti.biz/guide/If_structures_to_execute_code_based_on_a_condition


もっと読む必要があるので、セミコロンが必要だと思いました。私は今、それが同じ行に配置されている場合にのみ表示されます。ありがとうございました。
ジェフ

bashの条件に関する非常に良いチュートリアルへのリンクを追加しました
-prateek61

また、ゴードン・デイビスソンの答えはおそらく私のものよりも正しいことを指摘します。私はそれがきれいに見えるのでそれを試してみます。
prateek61
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.