ตัวแปรสภาพแวดล้อม HOSTNAME บน Linux


21

ในกล่อง Linux ของฉัน (เฉพาะ Gentoo Linux 2.6.31) ฉันสังเกตว่าตัวแปรสภาพแวดล้อม HOSTNAME นั้นมีอยู่ในเชลล์ แต่ไม่ได้อยู่ในสคริปต์ ตัวอย่างเช่น,

$ echo $HOSTNAME

ผลตอบแทน

xxxxxxxx.com,

แต่

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

ผลตอบแทน

nil

ในอีกทางหนึ่งตัวอย่างเช่นตัวแปรสภาพแวดล้อมของ USER นั้นมีทั้งในเชลล์และในสคริปต์

ฉันสังเกตเห็นว่า USER ปรากฏในรายการตัวแปรสภาพแวดล้อมที่ปรากฏขึ้นเมื่อฉันพิมพ์

export

กล่าวคือ

declare -x USER="infogrind"

แต่ HOSTNAME ไม่ ฉันสงสัยว่าปัญหานี้เกี่ยวข้องกับสิ่งนั้น

คำถามของฉัน: 1) ฉันจะทำให้ HOSTNAME พร้อมใช้งานในสคริปต์ได้อย่างไรและ 2) เพื่อความเข้าใจที่ดีขึ้นของฉันตัวแปรนี้ถูกตั้งค่าไว้ที่ใดในตอนแรกและทำไมจึงไม่ "ส่งออก"

คำตอบ:


21

$HOSTNAMEเป็นตัวแปร Bash ที่ตั้งค่าโดยอัตโนมัติ (ไม่ใช่ในไฟล์เริ่มต้น) Ruby อาจทำงานshกับเชลล์และไม่รวมตัวแปรนั้น ไม่มีเหตุผลที่คุณไม่สามารถส่งออกด้วยตนเองได้

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

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

~/.bashrcคุณสามารถเพิ่มคำสั่งการส่งออกให้เป็นหนึ่งในแฟ้มเริ่มต้นของคุณเช่น

ใน Ruby (แสดง irb):

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

2
มันมักจะดีกว่าที่จะใช้gethostname()เพราะสิ่งนี้
user1686

3
มาตรฐาน posix ระบุตัวแปรสภาพแวดล้อมที่คุณควรคาดหวังในระบบที่สอดคล้องกับ posix และ HOSTNAME ไม่ได้อยู่ในรายการ: pubs.opengroup.org/onlinepubs/009695399/basedefs/ ......
qneill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.