我有一行在rc.local
启动时运行一个简单的 bash 脚本。操作系统是 Raspberry Pi 3B+ 上的 Raspbian Stretch 4.14,带有“Witty Pi 2”电源管理板 (UUGear)。
bash /home/pi/Desktop/mount_and_run.bash &
bash 脚本似乎没有运行,并且syslog
表明错误可能与首先找不到文件有关 - 没有迹象表明 bash 文件甚至正在被读取。这是一个线索var/log/syslog
:
May 27 22:04:12 raspberrypi rc.local[417]: /home/pi/Desktop/mount_and_run.bash: line 30: cd: HOME not set
/home/pi
如果我进入终端,Raspberry 似乎确实知道 $HOME 是什么( ):
pwd; echo ~; echo $HOME
我还可以使用nano
. 我以前没有见过这种情况,以前脚本从rc.local
. 我将非常感谢您的见解和建议的修复,Stretch 的安装是全新的,我花了数小时测试和调查......
问题不在于找到脚本,问题在于您依赖于
$HOME
在可能未定义此变量的环境中具有值(环境rc.local
运行)。$HOME
通常仅在登录后才具有值(以及在其他一些记录在案的地方,例如在 cron 作业中)。您依赖于拥有一个值,因为您在(没有参数)中
$HOME
隐式使用它,或者在波浪号扩展中使用它。cd
解决此问题的一种方法是
$HOME
在脚本中显式设置:这将设置
$HOME
为,/home/pi
除非它已经设置并且非空。请注意,正在运行的命令是以
rc.local
root 身份运行的。要以特定用户身份运行脚本,请使用在
rc.local
.您甚至可能希望使用
su -l username -c bash ...
which 来模拟完整登录,然后将其设置$HOME
为给定用户的适当值。中列出的所有
rc.local
内容均由root
.出于某种原因,运行时似乎
HOME
没有设置变量rc.local
(这会导致/root/
,我相信你希望你的普通用户在 下/home/user/
)。要解决此问题,
$HOME
请在脚本中替换为完整路径,即/home/user/
.