如果需要使用 sudo 运行,我怎样才能使我的“PATH”中的可执行文件可供 GNU Make 使用



请考虑以下 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!"

有两个修复程序的组合可以解决此问题。

  1. 我需要在 .profile 中设置PATH而不是.bashrc,因为make使用的默认 shell /bin/sh没有从.bashrc中选取正确的路径。

  2. 我需要根据这个问题的答案,将 makefile 内的 sudo 命令的环境显式设置为外部 PATH。

    sudo env "PATH=$(PATH)" rpi-install.py  /dev/ttyUSB0 larson.bin
    

最新更新