微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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或等效文件中定义.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐