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