Biến HOME không được đặt


11

Tôi có hai máy chủ, chúng giống hệt nhau (tôi tin), máy chủ sản xuất và dàn dựng.

Và tôi có kịch bản mới nhất trong /etc/init/thư mục.

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

Trên máy chủ dàn, nó hoạt động tốt, nhưng khi tôi chạy tập lệnh đó trên máy chủ sản xuất thì biến HOME trống, mã echo "$HOME/.rbenv"được đánh giá là"/.rbenv"

Điều gì có thể là một vấn đề ở đây? Cảm ơn


Tôi không biết nguyên nhân gốc rễ, nhưng tại sao không đặt nó trước, mặc dù vậy?
việc

Tại sao kịch bản bash rườm rà? Có vẻ như (da) sh sẽ giải thích nó hoàn toàn tốt.
David Foerster

Câu trả lời:


10

Đọc câu hỏi này trên stackoverflow.com và câu trả lời này của người dùng grawitytrên superuser.com

Bạn không nên sử dụng $HOMEtrong init.d, bởi vì nó không phải là rõ ràng mà người dùng gia đình để sử dụng, cho đến nay người dùng đăng nhập.

Trích dẫn từ đặc tả 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>.

Bạn có thể sử dụng ít hack, để lấy thư mục nhà của người dùng myusertrong tập lệnh của bạn

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

Tốt hơn là sử dụng tập lệnh bên dưới, vì thường có thể có các HOME_*thư mục khác . Chẳng hạn như JAVA_HOMEvv

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

8

Có vẻ như $ HOME đang được giải thích trước khi nó đi đến bash? Tôi sẽ thử một trong những điều sau đây. Hoặc thêm:

env HOME=/home/MyName

để mã ngay sau khi mô tả.

Hoặc di chuyển mã từ bên trong khối tập lệnh sang tệp tập lệnh khác bằng:

#! /bin/bash

như dòng 1. Sau đó có

exec /path/to/my/script.sh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.