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



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

脚本如下:

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

当我从午夜指挥官运行 foo.py(在文件上设置光标并按回车键)时,它可以正常工作,它会正确导出路径并且 python 脚本失败,因为它没有足够的权限来重置 USB 设备。 我实际上已经制作了这个脚本来在 root 下运行 python 脚本,但根需要先设置一个使用的模块的路径。 但是当我跑步时

sudo foo.sh

我收到答案:

sudo: foo.sh: command not found

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

sudo python3 

输入终端也可以正常工作并打开 Python 解释器。

在sudo下导致错误行为的问题是什么?

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

但是,应该可以成功运行以下命令:

$ sudo ./foo.sh

我希望这能提供一些启示。

除非 foo.sh 位于 PATH 环境变量引用的目录中,否则环境将无法识别该命令,从而导致错误

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

sudo ./foo.sh

如果您位于其他目录中,请使用以下命令执行:

sudo /pathtosh/foo.sh

相关内容

  • 没有找到相关文章

最新更新