我有一个脚本 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