系统相关
首页 > 系统相关> > linux-为什么指定我的shell会更改root的EUID?

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

作者:互联网

如果在脚本中将我的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或等效文件中定义.

标签:bash,shell,ubuntu-14-04,sudo,linux
来源: https://codeday.me/bug/20191029/1959947.html