【问题标题】:BASH - getting UID on shell script does not work [duplicate]BASH - 在 shell 脚本上获取 UID 不起作用 [重复]
【发布时间】:2016-09-12 08:16:06
【问题描述】:

您好,我有一个关于 bash 的问题。

我是新手。

我制作了一个名为“test.sh”的文件,其内容是

#!/bin/bash
set -x
echo $UID
echo "$UID"
echo "$(id -u)"

结果是空白!! 什么都没有显示

但是,当我在终端上键入“echo $UID”时 它显示“1011”

bash 有什么我错过的吗?

请帮忙

更新

bash版本是4.3.11,我输入“sh test.sh”来执行。

结果是

+ echo

+ echo

+ id -u
+ echo 1011
1011

谢谢!

【问题讨论】:

  • 您的bash 版本是什么?如果您不知道怎么做,请输入bash --version!您是否尝试调试它?添加set -x after #!/bin/bash 并运行脚本以查看会发生什么
  • 至少输出两个空行吗?否则它似乎没有运行。
  • $UID 是一个 Bash 变量,未在 sh 下设置,这就是为什么你有空行。
  • 如果不行,可以使用uid=$(id -u)
  • sh 指向什么?你可以使用ls -lrt /bin/sh

标签: bash shell


【解决方案1】:

$UID 是一个 Bash 变量,在sh 下没有设置,这可能是它输出空行的原因。

尝试bash test.sh或使用chmod u+x test.sh使您的脚本可执行,然后将使用shebang中定义的程序(/bin/bash

【讨论】:

  • 谢谢!!我认为“sh”可以获取 bash 变量。
  • @EricLee, sh 只保证 POSIX sh 标准中指定的功能——它可能有也可能没有更多,但这可以随时更改(即,如果您的操作系统供应商用不同的实现替换它)。操作系统供应商这样做是有充分理由的——例如,ksh 在运行时比 bash 快得多(要清楚,指的是真正的 David Korn ksh,而不是克隆),而 ash 更小,并且可用构建进入busybox(在真实系统和小型恢复映像之间获得相同的脚本行为)。