HOME değişkeni ayarlanmadı


12

İki sunucum var, bunlar aynı (inanıyorum), üretim ve hazırlama sunucuları.

Ve /etc/init/klasörde uptart betiğim var .

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

Evreleme sunucusunda iyi çalışıyor, ama üretim sunucusunda o senaryoyu koşturup dururken ardından ANA değişken kod, boş echo "$HOME/.rbenv"için değerlendirdiğini"/.rbenv"

Burada sorun ne olabilir? Teşekkürler


Temel nedeni bilmiyorum, ama neden ilk olarak statik olarak ayarlamıyorsunuz?
— jobin

Neden hantal bash betiği? Görünüşe göre (da) sh mükemmel bir şekilde yorumlayacaktır.
— David Foerster

Yanıtlar:


11

Stackoverflow.com'daki bu soruyu ve superuser.com'daki kullanıcı tarafından bu yanıtı okuyungrawity

Sen kullanmamalısınız $HOMEiçinde init.diçeri Bu kullanıcının günlükleri kadar kullanımına kullanıcıların ev açık değildir, çünkü.

POSIX spesifikasyonundan alıntı :

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

myuserSenaryonuzda kullanıcının ana klasörünü almak için küçük kesmek kullanabilirsiniz

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

Aşağıdaki komut dosyasını kullanmak daha iyidir, çünkü genellikle başka HOME_*klasörler olabilir. Gibi JAVA_HOMEvb.

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

8

$ HOME bash gitmeden önce yorumlanıyor gibi görünüyor? Aşağıdakilerden birini denerdim. Aşağıdakilerden birini ekleyin:

env HOME=/home/MyName

açıklamadan hemen sonra koda.

Veya kodu komut dosyası bloğunun içinden başka bir komut dosyasına taşıyın:

#! /bin/bash

1. çizgi olarak

exec /path/to/my/script.sh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.