shell 脚本中的“cd”命令何时会失败?我该如何补救?

shell 脚本中的“cd”命令何时会失败?我该如何补救?

我有一个 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

相关内容