从 rc.local 运行 bash 时未设置 HOME

从 rc.local 运行 bash 时未设置 HOME

我有一行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

我还可以使用 读取桌面上的 bash 文件nano。我以前没有见过这种情况,在以前的情况下,脚本运行良好rc.local。我将非常感谢您的见解和建议的修复,Stretch 的安装是新鲜的,我花了几个小时进行测试和调查......

答案1

问题不在于查找脚本,问题在于您依赖于$HOME可能未定义此变量的环境中的值(rc.local运行环境)。 $HOME通常只有在登录后才有值(以及在其他一些有记录的地方,例如在 cron 作业中)。

您依赖于拥有一个值,因为您在(不带参数)或波形符扩展中$HOME隐式使用它。cd

解决此问题的一种方法是$HOME在脚本中显式设置:

HOME=${HOME:-/home/pi}
export HOME

除非它已经设置并且非空,否则它将设置$HOME为。/home/pi

请注意,正在运行的命令rc.local是以 root 身份运行的。要以特定用户身份运行脚本,请使用

su username -c bash /home/pi/Desktop/mount_and_run.bash &

rc.local

您甚至可能想使用su -l username -c bash ...它来模拟完整登录,从而为$HOME给定用户设置适当的值。

答案2

中列出的所有内容rc.local均由 运行root

由于某种原因,运行时似乎HOME未设置该变量rc.local(这将导致/root/,我相信您希望普通用户位于 下/home/user/)。

要解决此问题,请$HOME在脚本中替换为完整路径,即/home/user/.

相关内容