为什么指定我的shell会更改root的EUID?

时间:2014-06-18 21:08:51

标签: linux bash shell sudo ubuntu-14.04

如果我在脚本中将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。

提前致谢!

1 个答案:

答案 0 :(得分:4)

通过删除shebang行,你调用Ubuntu默认shell,这是Dash,而不是Bash。

Dash没有定义$EUID,导致空任务。事实上,$EUID是Bash对POSIX标准带来的众多增强之一。相反,Dash应尽可能小,快,轻,并且只实现标准所需的最小功能集。

你声称它在同一个shell中运行了四次,但事实上它并没有。环境变量$SHELL不引用运行当前进程的shell;它指的是您的帐户的登录shell,在/etc/passwd中定义或等效。