请考虑以下 Makefile。
install:
sudo rpi-install.py /dev/ttyUSB0 foo.bin
请注意,我故意没有硬编码rpi-install.py
路径,因为它不在其他人机器上的同一位置,但我希望它与使用我的代码的每个人PATH
不幸的是,当我键入make install
时,我得到以下输出。
sudo rpi-install.py /dev/ttyUSB0 larson.bin
sudo: rpi-install.py: command not found
make: *** [install] Error 1
当我在 shell 上键入完全相同的命令时,它完全按预期工作。
此外,当我从 Makefile 中删除sudo
时,它成功找到了二进制文件,并且由于缺少根权限而出现权限被拒绝错误。
如何允许make
发现PATH
中的程序,当它们必须使用sudo
运行时?
为了重现起见,假定以下内容在 rpi-install.py
中,并且它位于目录 $HOME/bin
中。此外,假设PATH
包括$HOME/bin
.
#!/usr/bin/env python
print "Hello World!"
有两个修复程序的组合可以解决此问题。
-
我需要在
.profile
中设置PATH
而不是.bashrc
,因为make
使用的默认 shell/bin/sh
没有从.bashrc
中选取正确的路径。 -
我需要根据这个问题的答案,将 makefile 内的
sudo
命令的环境显式设置为外部 PATH。sudo env "PATH=$(PATH)" rpi-install.py /dev/ttyUSB0 larson.bin