Biến môi trường HOSTNAME trên Linux


21

Trên hộp Linux của tôi (cụ thể là Gentoo Linux 2.6.31) Tôi đã nhận thấy rằng biến môi trường HOSTNAME có sẵn trong trình bao của tôi, nhưng không có trong các tập lệnh. Ví dụ,

$ echo $HOSTNAME

trả lại

xxxxxxxx.com,

nhưng

$ ruby -e 'puts ENV["HOSTNAME"]'

trả lại

nil

Mặt khác, biến môi trường USER, chẳng hạn, có sẵn cả trong trình bao và trong các tập lệnh.

Tôi đã nhận thấy rằng USER xuất hiện trong danh sách các biến môi trường xuất hiện khi tôi nhập

export

I E,

declare -x USER="infogrind"

nhưng HOSTNAME thì không. Tôi nghi ngờ vấn đề có liên quan đến điều đó.

Câu hỏi của tôi: 1) làm cách nào tôi có thể cung cấp HOSTNAME trong tập lệnh và 2) để tôi hiểu rõ hơn, biến này ban đầu được đặt ở đâu và tại sao nó không được "xuất khẩu"?

Câu trả lời:


21

$HOSTNAMElà một biến Bash được đặt tự động (chứ không phải trong tệp khởi động). Ruby có thể chạy shcho vỏ của nó và nó không bao gồm biến đó. Không có lý do gì bạn không thể tự xuất nó.

bash$ echo $HOSTNAME
foobar
bash$ sh -c 'echo $HOSTNAME'

bash$ export HOSTNAME
bash$ sh -c 'echo $HOSTNAME'
foobar

Bạn có thể thêm lệnh xuất vào một trong các tệp khởi động của mình, chẳng hạn như ~/.bashrc.

Trong Ruby (irb hiển thị):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"

2
Nó thường là tốt hơn để sử dụng gethostname()vì điều này.
dùng1686

3
Tiêu chuẩn posix liệt kê các biến môi trường mà bạn nên mong đợi trên các hệ thống tuân thủ posix và HOSTNAME không có trong danh sách: pubs.opengroup.org/onlinepub/009695399/basingefs/ tựa
qneill
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.