我有一个 shell 脚本上周未能完成;这是一个失败的“ cd
”命令,如果失败则退出。
该脚本是bash
用于配置新 Debian 安装的 shell 脚本。这是完整的脚本:debianConfigAswome.sh。该脚本以 root 身份运行,因此可以完全访问文件系统。
您能否列出脚本无法成功执行cd
命令的所有原因以及如何避免该错误?
答案1
失败的原因有多种cd
。目标可能不存在,目标可能不是目录,您可能没有访问目标目录的权限,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:[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