如果我在脚本中将shell指定为/ bin / bash,那么root的EUID为0.如果我没有,并且脚本在我的默认shell(也是/ bin / bash)中运行,则EUID为root是一个空字符串!我是脚本的新手,并认为只要bash运行这个节目就没有区别了。
我正在运行的代码检查程序是否由root运行,如果没有则重新启动程序。
#!/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
但如果我删除了她的砰砰声,我就会
euid = 1000
shell = /bin/bash
euid =
shell = /bin/bash
./test.sh: 4: [: -ne: unexpected operator
脚本在同一个shell中运行四次,所以为什么sudo在没有指定/ bin / bash的情况下调用它时会有不同的行为?
如果重要的话,我正在运行Ubuntu 14.04。
提前致谢!
答案 0 :(得分:4)
通过删除shebang行,你调用Ubuntu默认shell,这是Dash,而不是Bash。
Dash没有定义$EUID
,导致空任务。事实上,$EUID
是Bash对POSIX标准带来的众多增强之一。相反,Dash应尽可能小,快,轻,并且只实现标准所需的最小功能集。
你声称它在同一个shell中运行了四次,但事实上它并没有。环境变量$SHELL
不引用运行当前进程的shell;它指的是您的帐户的登录shell,在/etc/passwd
中定义或等效。