`command return`以降の終了ステータスがゼロ以外の状態であることを確認||

`command return`以降の終了ステータスがゼロ以外の状態であることを確認||

次のコードパッチが見つかりました。

function some_fun() {    
#[...]
    [ -d ${MKAPP_BUILDDIR}/tmp ] || mkdir ${MKAPP_BUILDDIR}/tmp || return 1

    if [ $? -ne 0 ]; then   # never true?
            mount -t tmpfs none ${MKAPP_BUILDDIR}/tmp || return 1
    fi
}

私が理解したところによれば、tmpビルドディレクトリにディレクトリがあることを確認し、そうでない場合はディレクトリを作成しようとします。もし失敗すると、関数はステータスコード1で終了します。

もしそうなら、以下のifステートメントで失敗した終了コードをチェックするのは無意味ですか?それ以前は、失敗したコマンドはありません。関数が返され、if文が処理されなくなるためです。

私が正しく考えているのか、それとも構文が私をだましているのでしょうか?

ところで、私はbashを使用しています。

ベストアンサー1

はい、そうです。プロシージャreturnは、終了状態 1 でスクリプトの元の呼び出し元に関数を終了します。

したがって、mountコマンドは処理されません。

この問題を解決するには、if .. thenmount コマンドから次の文を削除します。

[ -d ${MKAPP_BUILDDIR}/tmp ] || mkdir ${MKAPP_BUILDDIR}/tmp || return 1

mount -t tmpfs none ${MKAPP_BUILDDIR}/tmp || return 1

したがって、ディレクトリを作成できない場合は状態1で終了します。
正常に作成されたら、mountコマンドを実行します。

おすすめ記事