Shell-Script

shell 腳本中的“cd”命令何時會失敗,我該怎麼做才能補救?

  • June 13, 2021

我有一個上週未能完成的 shell 腳本;這是一個失敗的“ cd”命令,如果失敗則退出。

該腳本是一個bash用於配置新 Debian 安裝的 shell 腳本。這是完整的腳本:debianConfigAswome.sh。該腳本以 root 身份執行,因此它具有對文件系統的完全訪問權限。

您能否列出腳本無法成功執行cd命令的所有原因以及如何避免該錯誤?

cda可能失敗的原因有多種。目標可能不存在,目標可能不是目錄,您可能沒有訪問目標目錄的權限,cd可能找不到(儘管這極不可能,因為它是內置的 shell),chdir()操作可能由於損壞而失敗文件系統等

然而,在這種特殊情況下,它看起來像是腳本中的一個錯誤。您連結到的腳本有兩個呼叫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:x-auth-basic@github.com/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:x-auth-basic@github.com/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

引用自:https://unix.stackexchange.com/questions/511867