在我的主文件夹中有一个名为foo.sh的脚本。
当我导航到这个文件夹,并输入./foo.sh时,我得到
-bash: ./foo.sh:拒绝访问。
当我使用sudo ./foo.sh时,我得到
Sudo: foo.sh:命令未找到。
为什么会发生这种情况,我该如何解决?
在我的主文件夹中有一个名为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
看看这个答案,有一个想法,把软链接在哪个目录。
其他回答
这是我的解决方案: 在~ /。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
检查您是否拥有脚本的执行权限。即chmod +x foo.sh 检查脚本的第一行是否为#!/bin/sh之类的。 对于sudo,您在错误的目录。与sudo PWD确认
到目前为止,我在这里看到的其他解决方案都是基于一些系统定义,但实际上,只要正确调用它,就可以让sudo使用当前的PATH(使用env命令)和/或环境的其余部分(使用-E选项):
sudo -E env "PATH=$PATH" <command> [arguments]
事实上,我们可以用它来做一个别名:
alias mysudo='sudo -E env "PATH=$PATH"'
(也可以将别名本身命名为sudo,取代原来的sudo。)
sudo
command not found
输入sudo,按“Enter”,查看是否安装了sudo软件包。如果你安装了sudo,系统将显示一个简短的帮助消息,否则你将看到类似sudo: command not found的东西
安装sudo时,以root帐号执行如下命令:
如果您的系统基于apt包管理器
如果您的系统基于yum包管理器
关于使用sudo时“命令未找到”,更少的黑客方式是编辑secure_path。
这里描述得很完美: https://superuser.com/questions/927512/how-to-set-path-for-sudo-commands