在我的主文件夹中有一个名为foo.sh的脚本。

当我导航到这个文件夹,并输入./foo.sh时,我得到

-bash: ./foo.sh:拒绝访问。

当我使用sudo ./foo.sh时,我得到

Sudo: foo.sh:命令未找到。

为什么会发生这种情况,我该如何解决?


当前回答

您还可以在超级用户PATH中的某个目录(例如/usr/local/bin)中创建到脚本的软链接。然后sudo就可以使用它了。

chmod +x foo.sh
sudo ln -s path-to-foo.sh /usr/local/bin/foo

看看这个答案,有一个想法,把软链接在哪个目录。

其他回答

如果你对命令行不太熟悉,并且正在使用Ubuntu,你可以用下面的方法解决这个问题:

打开文件所在的文件夹窗口 右键单击可执行文件并选择Properties 转到权限选项卡,并突出显示允许执行文件作为程序

使用这种解决方案,您允许用户将文件作为程序执行,而不需要sudo(或更改root的PATH环境变量)。

如果上面的指南有问题,请尝试chmod u+x foo.sh,而不是chmod +x foo.sh。当其他的解都没有的时候,这个对我有用。

您还可以在超级用户PATH中的某个目录(例如/usr/local/bin)中创建到脚本的软链接。然后sudo就可以使用它了。

chmod +x foo.sh
sudo ln -s path-to-foo.sh /usr/local/bin/foo

看看这个答案,有一个想法,把软链接在哪个目录。

这是我的解决方案: 在~ /。Bash_aliases只需添加以下内容:

# ADDS MY PATH WHEN SET AS ROOT
if [ $(id -u) = "0" ]; then
   export PATH=$PATH:/home/your_user/bin 
fi

瞧! 现在,您可以使用sudo或设置为ROOT执行自己的脚本,而不必每次都执行导出PATH=$PATH:/home/your_user/bin。

注意,在添加PATH时需要显式添加,因为超级用户的HOME是/root

似乎linux会说“命令未找到”,即使你显式地给出了文件的路径。

[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
sudo: /tmp/uid.sh: command not found
1
[veeam@jsandbox ~]$ chmod +x /tmp/uid.sh
[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
0

这是一个有点误导人的错误,但从技术上来说可能是正确的。文件在可执行之前不是命令,因此无法找到。