首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在Bash脚本遇到“拒绝权限”时才提示“`sudo`”

问只有在Bash脚本遇到“拒绝权限”时才提示“`sudo`”
EN

Stack Overflow用户
提问于 2013-08-17 17:46:42
回答 1查看 1.1K关注 0票数 2

假设我有一个非常简单的脚本,它在某个目录中创建了一个链接,如果它失败了,它就会关闭该脚本。

代码语言:javascript
复制
ln -s "/opt/myapp" "${1}/link" || exit 1;

现在,如果它遇到错误,它就会退出。我希望将其更改为,只有当它在创建链接时遇到权限错误时,它才会执行以下行而不是退出:

代码语言:javascript
复制
echo "The target directory requires root privileges to access."
sudo ln -s "/opt/myapp" "${1}/myapp" || exit 1;

我不想提示用户作为根用户运行,除非他们绝对必须这样做。

无论是权限问题还是其他错误(如不存在的目录),ln似乎都会在失败时重新启动退出代码1,因此我无法使用它来检测它遇到的问题。

如果我在ln输出中存储字符串“拒绝权限”的搜索,我假设它将在非英语操作系统上失败。

EN

回答 1

Stack Overflow用户

发布于 2013-08-17 18:32:01

我不知道如何对ln退出原因进行分类,也不知道至少有任何关于可以用$?测试的特定退出代码的文档,但您可以使用标准[test或[命令](http://linux.die.net/man/1/test)测试相关权限:

代码语言:javascript
复制
SOURCEFILE="/opt/myapp"
DESTDIR="${1}"
DESTTARGET="${DESTDIR}/myapp"

if [ ! -d "$DESTDIR" -o ! -e "$SOURCEFILE" ]; then
  echo "Source file does not exist or destination directory does not exist." >&2
elif [ ! -r "$SOURCEFILE" -o ! -w "$DESTDIR" ]; then
  echo "Source file is not readable or destination directory is not writable." >&2
  # Run sudo command here
else
  # Should work, run command here
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18291663

复制
相关文章

相似问题

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