首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当一个"cd“命令在shell脚本中失败时,我能做些什么来补救它?

问当一个"cd“命令在shell脚本中失败时,我能做些什么来补救它?
EN

Unix & Linux用户
提问于 2019-04-11 09:44:32
回答 1查看 5.9K关注 0票数 1

我有一个上周未能完成的shell脚本;它是一个失败的"cd“命令,如果失败,它就退出。

该脚本是一个bash外壳脚本,用于配置新的Debian安装程序。下面是完整的脚本:debianConfigAswome.sh。脚本作为root运行,因此它可以完全访问文件系统。

请列出脚本无法成功执行cd命令的所有原因,以及如何避免错误?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-04-11 10:09:45

cd可能失败的原因有很多。目标可能不存在,目标可能不是目录,您可能没有访问目标目录的权限,可能找不到cd (尽管这不太可能,因为它是shell内置的),chdir()操作可能由于文件系统损坏而失败,等等。

然而,在这个特殊的例子中,它看起来就像脚本中的一个bug。链接到的脚本有两个对cd的调用:

代码语言:javascript
复制
cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }

和

代码语言:javascript
复制
cd $HOME || { echo "cd $HOME failed"; exit 155; }

我假设失败的是第一个失败的,因为cd $HOME应该正常工作。这是脚本的相关(稍微简化的)部分:

代码语言:javascript
复制
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不是目录,则运行创建nanorc目录的git命令。第一个可能的问题是,nanorc将在当前目录中创建,该目录可能不是$WORK_DIR。在您的脚本中,您还没有实际迁移到$WORK_DIR,所以只有在您从$WORK_DIR内部运行脚本时,它才能工作。

因此,简单的解决方案是在cd $WORK_DIR命令之前添加一个git:

代码语言:javascript
复制
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
票数 8
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/511867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档