树莓派运行LTE-Car代码遇/bin/sh: node未找到错误求助
问题描述
在64位树莓派4 Model B上运行LTE-Car车载代码时遇到以下问题:
- 非特权运行:执行
node index.js时触发权限错误,提示需以root身份运行,同时pigpio初始化失败(错误码-1)。 - 特权运行:
- 直接执行
sudo node index.js,提示sudo: node: command not found; - 使用node绝对路径执行
sudo /home/test/.nvm/versions/node/v14.21.3/bin/node index.js,程序连接成功,但点击Web界面启动按钮时出现[LTE-Car Error]: /bin/sh: 1: node: not found。
- 直接执行
解决方案
1. 解决sudo找不到node的问题
nvm是用户级安装工具,root用户默认不会加载当前用户的nvm环境变量,可通过以下两种方式解决:
方式一:创建系统级软链接
将nvm安装的node和npm链接到系统全局路径,让root能直接调用:
sudo ln -s /home/test/.nvm/versions/node/v14.21.3/bin/node /usr/local/bin/node sudo ln -s /home/test/.nvm/versions/node/v14.21.3/bin/npm /usr/local/bin/npm
完成后直接执行sudo node index.js即可,无需输入绝对路径。
方式二:保留用户环境变量运行sudo
用-E参数让sudo继承当前用户的环境变量(包含nvm的node路径):
sudo -E node index.js
2. 解决Web界面启动时node找不到的问题
该问题是因为程序内部启动子进程时调用node命令,但root的子进程环境中没有node的路径。上述方式一(创建系统软链接)可直接解决,因为系统全局路径对所有用户的子进程都可见。
若不想创建软链接,可修改程序中调用node的代码,将node替换为你的node绝对路径/home/test/.nvm/versions/node/v14.21.3/bin/node,找到程序中使用exec/spawn等启动子进程的代码位置修改即可。
额外说明
pigpio需要root权限才能访问树莓派GPIO接口,因此必须以sudo方式运行程序,非特权模式下权限不足属于正常现象。
内容的提问来源于stack exchange,提问作者spm96
相关产品推荐
相关产品推荐

