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


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="

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.