gpt4 book ai didi

bash - 空白的 shell 脚本第一行 : explain behavior of UID variable

转载 作者:行者123 更新时间:2023-11-29 09:21:26 24 4
gpt4 key购买 nike

我有两个非常简单的脚本,区别仅在于第一行是空白:

$ cat test.bash
#!/bin/bash
echo ${UID}
$ cat test_blank.bash

#!/bin/bash
echo ${UID}

现在我运行,有和没有nice:

$ ./test.bash
1060

$ ./test_blank.bash
1060

$ nice ./test.bash
1060

$ nice ./test_blank.bash

请解释为什么在最后一种情况下未设置 UID 变量。将 nice 替换为 sudonohup 时,行为是相同的。

最佳答案

观察:

$ bash test_blank.bash
1060
$ dash test_blank.bash

bash 产生输出,但 dash 不产生输出,它是类 debian 系统上的默认 sh。这是因为 bash 设置了 UID 但 dash 没有。 (POSIX 不需要 shell 来设置 UID。)因此,问题变成了哪个 shell 执行脚本。

当 bash 看到 ./test.sh 时,它 (bash) 运行脚本。当另一个命令(例如 nice)接收脚本作为参数并且脚本没有有效的 shebang 作为第一行时,默认 shell,可能是 dash,正在运行。

如果你想在 dash 或任何其他不提供它的 shell 中使用 UID,请使用 id 命令:

UID=$(id -u)

找出哪个 shell 正在运行脚本

要查看哪个 shell 正在运行脚本,请使用:

$ cat test2.sh

#!/bin/bash
ps $$
echo UID=${UID}

bash 下:

$ ./test2.sh
PID TTY STAT TIME COMMAND
1652 pts/12 S+ 0:00 bash -rcfile .bashrc
UID=1060

如果我们使用 nice 调用它,相比之下,我们可以看到它在 /bin/sh 下运行并且未分配 UID 变量:

$ nice test2.sh
PID TTY STAT TIME COMMAND
1659 pts/12 SN+ 0:00 /bin/sh test2.sh
UID=

关于bash - 空白的 shell 脚本第一行 : explain behavior of UID variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33795597/

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