Variabel HOME tidak diatur

12

Saya memiliki dua server, mereka identik (saya percaya), server produksi dan pementasan.

Dan saya punya skrip pemula dalam /etc/init/folder.

description "Discoure process"

setuid deploy
setgid deploy

respawn
respawn limit 3 30

start on runlevel [2345]
stop on runlevel [06]

script
exec /bin/bash <<'EOT'
  echo \"$HOME/.rbenv\"

  cd /home/deploy/discourse/current

  bundle exec bluepill load config/discourse.pill --no-privileged --base-dir tmp/bluepill --logfile log/bluepill.log
EOT
end script

Pada staging server berfungsi dengan baik, tetapi ketika saya menjalankan skrip itu di server produksi maka variabel HOME kosong, kode echo "$HOME/.rbenv"tersebut mengevaluasi ke"/.rbenv"

Apa yang mungkin menjadi masalah di sini? Terima kasih

megas
sumber
Saya tidak tahu akar penyebabnya, tetapi mengapa tidak mengaturnya terlebih dahulu, secara statis?
jobin
Mengapa skrip bash yang rumit? Sepertinya (da) sh akan menafsirkannya dengan sangat baik.
David Foerster

Jawaban:

11

Baca pertanyaan ini di stackoverflow.com dan jawaban ini oleh pengguna grawitydi superuser.com

Anda tidak harus menggunakan $HOMEdi init.d, karena tidak jelas yang pengguna rumah untuk digunakan, sampai pengguna ini log di.

Kutipan dari spesifikasi POSIX :

HOME
The system shall initialize this variable at the time of login to be a pathname
of the user's home directory. See <pwd.h>.

Anda dapat menggunakan sedikit hack, untuk mendapatkan folder home user myuserdalam skrip Anda

su - myuser -c /usr/bin/env | grep HOME

Lebih baik menggunakan skrip di bawah ini, karena biasanya bisa ada HOME_*folder lain . Seperti JAVA_HOMEdll

su - myuser -c /usr/bin/env | grep "^HOME="
c0rp
sumber
8

Sepertinya $ HOME ditafsirkan sebelum pergi ke bash? Saya akan mencoba salah satu dari yang berikut ini. Tambahkan:

env HOME=/home/MyName

ke kode setelah deskripsi.

Atau pindahkan kode dari dalam blok skrip ke file skrip lain dengan:

#! /bin/bash

sebagai baris 1. Lalu miliki

exec /path/to/my/script.sh
Julian Stirling
sumber