シェルスクリプトの「cd」コマンドはいつ失敗しますか?この問題をどのように解決できますか?

シェルスクリプトの「cd」コマンドはいつ失敗しますか?この問題をどのように解決できますか?

cd先週は完了できなかったシェルスクリプトがありましたが、失敗すると終了するコマンドです。

このスクリプトは、bash新しい Debian インストールの設定に使用されるシェルスクリプトです。完全なスクリプトは次のとおりです。debianConfigAswome.sh。スクリプトはrootとして実行されるため、ファイルシステムへのフルアクセス権があります。

cdスクリプトがコマンドを正常に実行できない理由と、このエラーを回避する方法をリストできますか?

答え1

失敗にはいくつかの理由がありますcd。ターゲットが存在しない場合、ターゲットがディレクトリではない場合、ターゲットディレクトリにアクセスする権限がない場合、または見つからない可能性がありますcd(組み込みシェルなので、そうする可能性はほとんどありません)。操作がchdir()失敗する可能性があります。破損したファイルシステムなどにより

しかし、この特別なケースではスクリプトのバグのように見えます。接続したスクリプトには2つの呼び出しがありますcd

cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }

そして

cd $HOME || { echo "cd $HOME failed"; exit 155; }

cd $HOME通常は機能する必要があるため、失敗したものが最初であると仮定します。以下はスクリプトの関連(少し単純化された)部分です。

if [ ! -d "$WORK_DIR"/nanorc  ]
then
    echo "Setting up Nanorc file for all users....please, wait!"
    git clone https://$OAUTH_TOKEN:[email protected]/gnihtemoSgnihtemos/nanorc || { echo "git failed"; exit 127; }
    chmod 755 "$WORK_DIR"/nanorc || { echo "chmod nanorc failed"; exit 127; }
     cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }
fi

したがって"$WORK_DIR"/nanorc、ディレクトリでない場合は、ディレクトリをgit生成するコマンドを実行します。nanorc最初の考えられる問題は、nanorc現在のディレクトリではない可能性がある現在のディレクトリに作成されることです$WORK_DIR。スクリプトのこの時点では実際には移動しなかった$WORK_DIRため、スクリプトを実行している場合にのみ機能する必要があります$WORK_DIR

cd $WORK_DIRしたがって、簡単な解決策はコマンドの前にこれを追加することですgit

if [ ! -d "$WORK_DIR"/nanorc  ]
then
    cd "$WORK_DIR" | { echo "cd $WORK_DIR failed"; exit 127; }
    echo "Setting up Nanorc file for all users....please, wait!"
    git clone https://$OAUTH_TOKEN:[email protected]/gnihtemoSgnihtemos/nanorc || { echo "git failed"; exit 127; }
    chmod 755 "$WORK_DIR"/nanorc || { echo "chmod nanorc failed"; exit 127; }
     cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }
fi

関連情報