som*_*ing 0 cd-command shell-script command pwd
我有一个上周未能完成的 shell 脚本;这是一个失败的“ cd
”命令,如果失败则退出。
该脚本是bash
用于配置新 Debian 安装的shell 脚本。这是完整的脚本:debianConfigAswome.sh。该脚本以 root 身份运行,因此它可以完全访问文件系统。
您能否列出脚本无法成功执行cd
命令的所有原因以及如何避免错误?
acd
可能失败的原因有多种。目标可能不存在,目标可能不是目录,您可能没有访问目标目录的权限,cd
可能找不到(尽管这是极不可能的,因为它是内置的 shell),chdir()
操作可能因损坏而失败文件系统等
然而,在这种特殊情况下,它看起来像是脚本中的一个错误。您链接到的脚本有两个调用cd
:
cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }
Run Code Online (Sandbox Code Playgroud)
和
cd $HOME || { echo "cd $HOME failed"; exit 155; }
Run Code Online (Sandbox Code Playgroud)
我假设失败的是第一个,因为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
Run Code Online (Sandbox Code Playgroud)
因此,如果 "$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
Run Code Online (Sandbox Code Playgroud)