gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:04:30 28 4
gpt4 key购买 nike

如果我在脚本中将我的 shell 指定为/bin/bash,则 root 的 EUID 为 0。如果我不这样做,并且脚本在我的默认 shell(也是/bin/bash)中运行,则 root 的 EUID root 是一个空字符串!我是脚本新手,认为只要 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。

Dash 没有定义 $EUID,导致空赋值。事实上,$EUID 是 Bash 对 POSIX 标准带来的众多增强功能之一。相反,Dash 旨在尽可能小巧、快速和轻便,并且仅实现标准所需的最少功能集。

您断言它四次都在同一个 shell 中运行,但实际上并非如此。环境变量$SHELL 不是指运行当前进程的shell;它指的是您帐户的登录 shell,在 /etc/passwd 或等效项中定义。

关于linux - 为什么指定我的 shell 会更改 root 的 EUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24295045/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com