我在 Windows 的虚拟机上安装了 ubuntu。当我运行脚本时,我只需./blabla.sh
在终端中输入 sudo 即可运行它。
然后我直接在笔记本电脑上从相同的 iso 文件安装了 ubuntu,所以它不是虚拟机。
当我运行相同的脚本: sudo 时./blabla.sh
,它说找不到命令。然后,如果我chmod +x blabla.sh
这样做,我就可以运行它。
为何两者会有这样的差异呢?
答案1
sudo
需要至少设置一个执行位才能执行文件,即您需要为(至少)用户或组或其他人设置执行位。如果没有设置执行位,则无法以 的身份执行文件sudo ./script
。
这个例子会让你清楚:
$ ls -l test_scr
-rw-rw-r-- 1 user user 30 May 4 03:50 test_scr
$ sudo ./test_scr
sudo: ./test_scr: command not found
$ ./test_scr
bash: ./test_scr: Permission denied
$ chmod u+x test_scr
$ sudo ./test_scr
Hello world
$ ./test_scr
Hello world
还要注意,您不需要使该文件可执行,您可以将该文件作为 shell 二进制文件的参数来执行它:
$ bash test_scr
Hello world
$ sudo bash test_scr
Hello world