未设置HOME变量


12

我有两个服务器,它们是相同的(我相信),生产服务器和登台服务器。

我在/etc/init/文件夹中有新贵脚本。

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

在登台服务器上,它运行良好,但是当我在生产服务器上运行该脚本时,HOME变量为空,代码echo "$HOME/.rbenv"正在评估为"/.rbenv"

这可能是个问题吗?谢谢


我不知道根本原因,但是为什么不先设置它呢(静态地)?
jobin 2013年

为什么笨拙的bash脚本?看起来(da)sh会很好地解释它。
大卫·佛斯特

Answers:


11

在stackoverflow.com上阅读此问题,并在superuser.com上按用户阅读此答案grawity

你不应该使用$HOMEinit.d,因为它是不明确哪些用户在家中使用,直到该用户登录。

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

您可以使用小技巧,myuser在脚本中获取用户的主文件夹

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

最好使用下面的脚本,因为通常可以存在其他HOME_*文件夹。如JAVA_HOME

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

8

好像$ HOME在进行bash之前已被解释?我会尝试以下之一。可以添加:

env HOME=/home/MyName

描述之后的代码。

或者使用以下命令将代码从脚本块内部移动到另一个脚本文件:

#! /bin/bash

作为第1行。然后有

exec /path/to/my/script.sh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.