Raspbian
從 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
我還可以使用
nano
. 我以前沒有見過這種情況,以前腳本從rc.local
. 我將非常感謝您的見解和建議的修復,Stretch 的安裝是全新的,我花了數小時測試和調查……
問題不在於找到腳本,問題在於您依賴於
$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 ...
which 來模擬完整登錄,然後將其設置$HOME
為給定使用者的適當值。