Bash พรอมต์บน Ubuntu - FQDN (\ H) เหมือนกับชื่อโฮสต์ (\ h)


14

เรามีสภาพแวดล้อมที่แยกต่างหากในที่ทำงานของฉันเพื่อการพัฒนาการทดสอบการรวมและการจัดเตรียม

ภายใน Envs เหล่านั้นเราได้มากเกินไปในชื่อโฮสต์ของ DNS - เช่นในสภาพแวดล้อม dev ที่เครื่องเว็บหลักที่เรียกว่าและในสภาพแวดล้อมการทดสอบเครื่องเว็บหลักคือweb1.dev.example.comweb1.test.example.com

เพื่อแยกความแตกต่างระหว่างเครื่องในสภาพแวดล้อมที่แตกต่างกันฉันต้องการกำหนด bash prompts เพื่อแสดง FQDN แทนที่จะเป็นเพียงชื่อโฮสต์ ดีและดี ฉันควรจะสามารถที่จะแทนที่\hด้วย\Hใน$PS1ใช่มั้ย? อืมมม พวกเขาแสดงสิ่งเดียวกัน

me@web1:~$ hostname
web1
me@web1:~$ hostname -f
web1.dev.example.com
me@web1:~$ export PS1="\[\u@\h: \w\]\$ "
me@web1: ~$ export PS1="\[\u@\H: \w\]\$ "
me@web1: ~$ 

ใน/etc/hostnameฉันมีแค่ชื่อโฮสต์ ( web1) hostnameและhostname -fทั้งสองกลับผลลัพธ์ที่ถูกต้อง ( "web1" และ "web1.test.example.com" ตามลำดับ) /etc/hostsและผมได้มีรายการที่ถูกต้องใน

สิ่งที่ช่วยให้?

สิ่งเหล่านี้คือโฮสต์ Ubuntu 10.04 ถ้านั่นสร้างความแตกต่าง

คำตอบ:


18

ลองใช้การเรียกที่ชัดเจนhostname -fเพื่อรับ fqdn ของระบบ

export PS1="\[\u@$(hostname -f): \w\]\$ "

เช่น

iain$ export PS1="\[\u@$(hostname -f): \w\]\$ "
iain@ub10-04-1.lan: ~$ 

แก้ไข:

การวิจัยเพิ่มเติมแสดงให้เห็นว่าเนื้อหาของ/etc/hostname(Ubuntu) และ/etc/sysconfig/network(CentOS) มีความเกี่ยวข้อง หาก FQDN อยู่ในไฟล์แสดงว่า\Hทำงานอย่างถูกต้อง

ชื่อโฮสต์ (1) หน้าคนสำหรับ Ubuntu ไม่ได้บอกว่าคุณไม่ควรใส่ FQDN ใน / etc / hostname แต่ไม่ได้ให้เหตุผลว่าทำไม


นั่นเป็นเรื่องที่น่าเกลียด :( แต่ใช้งานได้ฉันอาจปล่อยให้เปิดไว้นานกว่านี้สักหน่อยมันคงจะดีจริงๆถ้าได้รับการแก้ไขที่ "สะอาด"
เบ็นวิลเลียมส์

ดูเหมือนว่าจะเกี่ยวข้องกับ debian / ubuntu มันทำงานได้ตามที่คาดไว้ใน Centos
user9517

1
ใช่มันเป็นปัญหาของ Ubuntu อย่างแน่นอน ฉันใช้วิธีแก้ปัญหาที่แนะนำของคุณแล้ว ฉันควรรายงานสิ่งนี้ว่าเป็นข้อผิดพลาดกับ Bash ใน Ubuntu
Ben Williams

@BenWilliams: อัปเดตคำตอบพร้อมกับสิ่งที่ควรทำให้มันแย่ลง
user9517

ฉันยังพบความคลุมเครือเดียวกันในเอกสารการตั้งค่าชื่อโฮสต์ของ Ubuntu ไม่แน่ใจว่าจะแก้ไขได้อย่างไร
Dogweather

4

มีจำนวนบ้าคลั่งเกี่ยวกับชื่อโฮสต์สั้นและยาวและทำให้ถูกต้องตลอดเวลาเป็นเรื่องยาก - ดังนั้นฉันเพียงแค่ยอมแพ้และทำให้ทุกอย่างใช้ FQDN เป็นชื่อโฮสต์ ...

ฉันทำสิ่งเดียวกับคุณในสภาพแวดล้อมของฉัน แต่ฉันตัด FQDNs ลงในพรอมต์เพราะฉันรู้ว่าไซต์ใดที่ฉันเปิดอยู่และประหยัดพื้นที่ ฉันยังใส่รหัสสีของฉันตามสภาพแวดล้อมด้วยดังนั้นฉันจึงได้รับคำเตือนที่ดีขึ้นเมื่อฉันทำอะไรบางอย่าง "สำคัญ" ฉันยังแยกพื้นที่จากทุกอย่างเพื่อให้ง่ายต่อการคัดลอกพาสต้า ตัวอย่างจากสต็อกของฉัน/etc/profile:

if hostname -f | grep -q '\.stg\.example\.com'; then
  _ROOT_COLOR=33  # yellow
  _USER_COLOR=36  # cyan
else
  _ROOT_COLOR=31  # red
  _USER_COLOR=32  # green
fi

if [ "`id -u`" -eq 0 ]; then
  PS1="\[\033[01;${_ROOT_COLOR}m\]$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w #\[\033[00m\] "
else
  PS1="\[\033[01;${_USER_COLOR}m\]\u@$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w $\[\033[00m\] "
fi

และตราบใดที่ "ความอัปลักษณ์" ดำเนินไปใครจะสนใจว่าโค้ดที่จะแสดงพร้อมท์นั้นเป็นอย่างไร? มันเป็นรหัสแบบเขียนอย่างเดียวส่วนใหญ่แล้ว


1
+1 สำหรับการใช้สี
Saad Masood

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.