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

Cannot run .sh script under sudo in linux

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

脚本如下:

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

当我 运行 来自 Midnight Commander 的 foo.py(在文件上设置光标并按回车)它工作时,它正确导出路径并且 python 脚本失败,因为它没有足够的权限来重置 USB 设备。 我实际上已经将此脚本制作为 root 下的 运行 python 脚本,但 root 需要先设置使用模块的路径。 然而当我 运行

sudo foo.sh

我收到回复:

sudo: foo.sh: command not found

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

sudo python3 

在终端中输入也能正常工作并打开 python 解释器。

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

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

如果您在包含 foo.sh 脚本的目录中,请执行它:

sudo ./foo.sh

如果您在不同的目录中,请执行:

sudo /pathtosh/foo.sh

我可能弄错了(我手边没有 Linux 自动提款机,所以我无法验证),但如果我没记错的话 user_home 是 [=12] 的一部分=] 为该用户导出的变量。 当您使用命令 sudo 时,您代表 root 行事,它与您的 user_home 不同(== 当前用户),因此您的脚本在任何active PATH 中列出的目录(root 中的一个,因为您正在使用 sudo 命令)。

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

  $ sudo ./foo.sh

我希望这会有所启发。