如果在脚本中将我的shell指定为/ bin / bash,则root的EUID为0.如果我没有这样做,并且脚本在我的默认shell(也为/ bin / bash)中运行,则root的EUID为空字符串!我是脚本的新手,并且认为只要bash进行表演就没有任何区别.
我正在运行的代码检查程序是否由root用户运行,如果没有,则以sudo重启程序.
#!/bin/bash
echo euid = $EUID
echo shell = $SHELL
if [ $EUID -ne 0 ]; then
sudo "$0"
exit $?
fi
跑步的时候我看到
euid = 1000
shell = /bin/bash
euid = 0
shell = /bin/bash
但是,如果我删除she-bang行,我会得到
euid = 1000
shell = /bin/bash
euid =
shell = /bin/bash
./test.sh: 4: [: -ne: unexpected operator
该脚本在同一shell中运行了四次,因此,为什么在sudo调用时未指定/ bin / bash时,它的行为有所不同?
如果重要的话,我正在运行Ubuntu 14.04.
提前致谢!
解决方法:
通过删除shebang行,您可以调用Ubuntu默认shell,即Dash,而不是Bash.
破折号未定义$EUID,导致分配为空.实际上,$EUID是Bash在POSIX标准上带来的众多增强功能之一.取而代之的是,Dash旨在尽可能小,快速和轻巧,并且仅实现标准所要求的最少功能.
您断言它在同一外壳中全部运行了四次,但实际上并非如此.环境变量$SHELL不引用运行当前进程的外壳程序;它是指您的帐户的登录shell,在/ etc / passwd或等效文件中定义.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。