Shell-Script
shell 腳本中的“cd”命令何時會失敗,我該怎麼做才能補救?
我有一個上週未能完成的 shell 腳本;這是一個失敗的“
cd
”命令,如果失敗則退出。該腳本是一個
bash
用於配置新 Debian 安裝的 shell 腳本。這是完整的腳本:debianConfigAswome.sh。該腳本以 root 身份執行,因此它具有對文件系統的完全訪問權限。您能否列出腳本無法成功執行
cd
命令的所有原因以及如何避免該錯誤?
cd
a可能失敗的原因有多種。目標可能不存在,目標可能不是目錄,您可能沒有訪問目標目錄的權限,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