Thay đổi người dùng và tải toàn bộ môi trường trong shell script


9

Tôi đang gặp một số rắc rối với một tập lệnh mới bắt đầu của chúng tôi làm thay đổi người dùng và bắt đầu một vài quy trình trình tự ruby.

Trước đây tôi chỉ đơn giản là bash -c "do the business" -l someuserđảm bảo sử dụng -lcờ để giả lập thông tin đăng nhập.

Điều này đã làm việc rất tốt cho đến bây giờ, quá trình ruby ​​của chúng tôi đã gặp phải lỗi require: no such file to load -- rubygems (LoadError)sau : sau một số điều tra tôi thấy lỗi này chỉ xảy ra khi tôi chạy tập lệnh với tư cách là người dùng root, tức là (khi tôi sudo suhoặc khi được chạy bởi mới bắt đầu).

Tôi nghĩ rằng đây là một vấn đề PATH vì khi tôi tự đặt đường dẫn trước, nó sẽ giải quyết vấn đề.

Có cách nào để thay đổi người dùng và tải toàn bộ môi trường không?

Tôi cũng đã thử su user -csudo.


Để làm cho nó dễ dàng hơn để kiểm tra tôi đang "root" ( sudo su) và chạy which bundle(bó là một thứ ruby).

Đây là những gì tôi nhận được:

  • sudo -i -u webuser which bundle # => không có đầu ra
  • su -l webuser -c which bundle # => không có đầu ra
  • sudo su - webuser -c which bundle # => không có đầu ra

Nhưng ssh'd trong như là webuser

  • which bundle # => / opt / ruby ​​/ bin / bó

1
Bạn đã thử su - user -cchưa
Karlson

Phân phối là gì?
artistoex

Tập lệnh của bạn có phụ thuộc vào các mô-đun ruby ​​được cài đặt trên mỗi người dùng không?
Keith

@artistoex nó là Ubuntu :)
Daniel Upton

1
Tôi chắc chắn rằng đó thực sự là một vấn đề PATH (kết xuất biến trong tập lệnh). Sau đó so sánh các PATH và nhìn vào /etc/profile ~/.bash_profile ~/.bash_login~/.profile. Đối với shell đăng nhập, bash đánh giá chúng theo thứ tự nhất định.
artistoex

Câu trả lời:


10

Sử dụng sudo su - user -csẽ làm cho nó như thể bạn đăng nhập khi người đó thừa hưởng đường dẫn của họ. Đó là lý do tại sao su userkhác với su - user.

Tuy nhiên, nếu bạn đang thiết lập đường dẫn trong một .bashrctệp, nó sẽ chỉ có hiệu lực cho các phiên tương tác (nghĩa là ssh-ing với tư cách là người dùng đó).

Thay vào đó bạn nên sử dụng .bash_profilehoặc /etc/profile, xem điều này .


3
Bạn nên lưu ý rằng su -su -lđồng nghĩa.
jordanm

3
và có lẽ nên giới thiệu --logincho dễ đọc.

3

Đối với bối cảnh đăng nhập, hãy sử dụng một trong hai:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND
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.