rc.local에서 bash를 실행할 때 HOME이 설정되지 않았습니다.

rc.local에서 bash를 실행할 때 HOME이 설정되지 않았습니다.

rc.local시작 시 간단한 bash 스크립트를 실행하는 줄이 있습니다 . 운영 체제는 "Witty Pi 2" 전원 관리 보드(UUGear)가 있는 Raspberry Pi 3B+의 Raspbian Stretch 4.14입니다.

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

.NET을 사용하여 데스크탑에서 bash 파일을 읽을 수도 있습니다 nano. 이전에는 이런 일이 발생하는 것을 본 적이 없으며 이전 사례에서는 스크립트가 제대로 작동했습니다 rc.local. 귀하의 통찰력과 제안된 수정 사항에 대해 매우 감사드립니다. Stretch 설치가 새로워졌으며 테스트하고 조사하는 데 몇 시간을 보냈습니다...

답변1

문제는 찾기 스크립트에 있는 것이 아닙니다. 문제는 이 변수가 정의되지 않은 환경(실행 환경) $HOME의 값 에 의존하고 있다는 것입니다. 일반적으로 값은 로그인한 후에만 사용할 수 있습니다(크론 작업과 같이 문서화된 다른 위치에서도 사용할 수 있습니다).rc.local$HOME

$HOME값 을 암시적으로 (인수 없이) 사용하거나 물결표 확장에 사용하기 때문에 값이 있어야 합니다.cd

이 문제를 해결하는 한 가지 방법은 $HOME스크립트에서 명시적으로 설정하는 것입니다.

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

이미 설정되어 있고 null이 아닌 경우가 아니면 설정됩니다 $HOME./home/pi

실행 중인 명령은 rc.local루트로 실행되고 있습니다. 특정 사용자로 스크립트를 실행하려면 다음을 사용하십시오.

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/.

관련 정보