奇怪的 bash 脚本行为

奇怪的 bash 脚本行为

我有两个 bash 脚本,它们是二进制相同的,具有相同的权限,在我的驱动器上是唯一的,并且在sudoers.仍然有一个通过了 root 的 uid 测试,而另一个则没有。如果我./在 bin 文件夹中调用第一个,它的行为就像第二个一样。

脚本(sync-samuel):

#!/usr/bin/env bash

echo "[$0]"
whoami

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root"
    exit 1
fi

id -u
exit

输出:

samuel@xeon:~$ sync-samuel
[sudo] password for samuel: 
[/home/samuel/bin/sync-samuel]
root
0
samuel@xeon:~$ sync-samuel2
[/home/samuel/bin/sync-samuel2]
samuel
This script must be run as root
samuel@xeon:~$ cd bin
samuel@xeon:~/bin$ ./sync-samuel
[./sync-samuel]
samuel
This script must be run as root

权限:

-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:36 sync-samuel
-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:37 sync-samuel2

文件:

samuel@xeon:~/bin$ file sync-samuel
sync-samuel: a /usr/bin/env bash script, ASCII text executable
samuel@xeon:~/bin$ file sync-samuel2
sync-samuel2: a /usr/bin/env bash script, ASCII text executable

有谁知道,是什么触发了这种行为,或者我如何查看这两个文件的扩展属性?我正在使用带有 bash 4.3.11(1)-release 的 Lubuntu 14.04 LTS。

编辑:G-Man 就是男人!第一个也是别名:

samuel@xeon:~/bin$ type sync-samuel2
sync-samuel2 is hashed (/home/samuel/bin/sync-samuel2)
samuel@xeon:~/bin$ type sync-samuel
sync-samuel is aliased to `sudo /home/samuel/bin/sync-samuel'

答案1

您的输出显示sync-samuel发出sudo提示,即使您在没有运行它sudo 并且脚本本身不调用sudo.这没有任何意义。看起来,当您输入 时,您正在运行问题中显示的脚本sync-samuel之外的其他内容。sync-samuel

这可能sync-samuel实际上是一个别名sudo sync-samuel或类似的东西。另一种可能性是您sync-samuel 在另一个目录中有另一个副本,并且您的 shell 正在查找(并运行)它而不是您正在查看的副本。要诊断此问题,请发出以下命令:

type sync-samuel sync-samuel2

type是一个内置命令,显示 shell 如何解释每个命令。如果您得到两个文件的显着不同的响应(例如,sync-samuel是别名而sync-samuel2不是),您将知道如何继续使它们得到相同的处理(例如,sync-samuel2也为 定义别名)。

相关内容