在Linux下使用sudo无法运行.sh脚本

3

我有一个名为foo.sh的脚本,位于/home/pi/Documents/Python目录中。这个shell脚本的目的是运行需要root权限的python脚本,因为它必须重置usb设备。

脚本如下:

#!/bin/sh
export PATH="$PATH:/home/pi/.local/lib/python3.7"
python3 /home/pi/Documents/Python/foo.py

当我在Midnight Commander中运行foo.py(将光标设置在文件上并按Enter键),它可以正常工作,正确导出路径,但Python脚本失败了,因为没有足够的权限重置USB设备。 实际上,我已经编写了一个脚本来以root用户身份运行Python脚本,但是需要先设置使用模块的路径。 但是,当我运行时

sudo foo.sh

我收到了一个回答:
sudo: foo.sh: command not found

我已经检查了权限,foo.sh文件有-rwxr-xr-x。
sudo python3 

在终端中输入也能正确地打开Python解释器。

在sudo下出现错误行为的问题是什么?

2个回答

0

除非foo.sh在PATH环境变量所引用的目录中,否则系统将无法识别该命令,因此会出现错误。

如果你在包含foo.sh脚本的目录中,使用以下命令来执行它:

sudo ./foo.sh

如果你在不同的目录中,使用以下命令执行:

sudo /pathtosh/foo.sh

0

我可能弄错了(我手头没有Linux机器,所以无法验证),但是如果我记得正确的话,user_home是导出给该用户的PATH变量的一部分。 当你使用sudo命令时,你是代表root用户操作的,而root用户的user_home与你的(即当前用户)不同,因此你的脚本在任何列在活动 PATH(即sudo命令的那个)中的目录中都找不到。

然而,应该可以成功运行以下命令:

  $ sudo ./foo.sh

希望这能给你一些启示。


你是对的,sudo ./foo.sh 是可以运行的。我的错误在于期望它的行为与Windows下的cmd类似,在其中它会尝试在活动目录中查找文件,而不仅仅是在活动路径中。谢谢你的解释。 - Myk
不客气。有帮助吗?运行正常吗? - Davide Martorana
它可以工作,我只需要正确设置PATH变量,因为root用户无法看到所使用的Python模块。 - Myk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接