หาก sshd ของคุณไม่ได้ให้ตัวแปรที่มีประโยชน์คุณสามารถใช้
ps -p $PPID
หรือเคล็ดลับ ps สุ่มอื่น ๆ (ถ้าเชลล์ของคุณไม่ได้ตั้งค่า$PPID
) เพื่อดูว่ากระบวนการหลักของเชลล์นั้นเป็นกระบวนการเข้าสู่ระบบระยะไกลของคุณหรือไม่ จากนั้นถ้า parent-is-remote-thingie สลับ $ PS1 จากนั้นดาวน์โหลด OpenSSH และใช้คำแนะนำของ geekosaur / Caleb เนื่องจากเซิร์ฟเวอร์ ssh ของคุณเป็นขยะ ;)
หรือคุณสามารถใช้เอาต์พุตของ "who am i" คว้าฟิลด์สุดท้าย (เช่น$( who am i | awk '$0=$NF')
) และตรวจสอบเพื่อดูว่าโฮสต์เป็นรีโมตหนึ่งหรือโลคัลเพื่อตัดสินใจว่าคุณล็อกอินแบบโลคัลหรือแบบรีโมต
หรือคุณสามารถเปิดเอาต์พุต$(hostname)
เพื่อให้เชลล์ใช้ $ PS1 ที่เหมาะสมบนโฮสต์ที่เฉพาะเจาะจง
หรือไปบ้ากันเถอะ หากคุณใช้เชลล์ที่ทันสมัย - เช่น bash, ksh93 หรือ zsh คุณสามารถใช้ประโยชน์จากความจริงที่ว่า $ PS1 ได้รับการประเมินใหม่เมื่อดำเนินการ ดังนั้นคุณสามารถรวมบล็อกที่มีเงื่อนไขแบบอินไลน์เพื่อทำสิ่งคอมไพล์บ้าถ้า cwd ของคุณอยู่ในพื้นที่เก็บข้อมูลและอย่างอื่นนอก ตัวอย่างเช่นที่นี่ฉันทำการเปลี่ยนแปลงที่รวดเร็วขึ้นอยู่กับไดเรกทอรีที่ฉันใช้[[ conditional ]] && $( echo "whatever it should be if true) || $( echo "whatever should be the if-not-true prompt" )
โดยทั่วไป
default prompt$ PS1='$(id -un) @ $(hostname)$( [[ $(pwd) = /tmp ]] && echo " [I am in /tmp]" || echo " /not/in/tmp")$ '
myname @ host /not/in/tmp$ cd /tmp
myname @ host [I am in /tmp]$ cd /etc
myname @ host /not/in/tmp$
แน่นอนว่าคำนิยาม $ PS1 จะดูบ้าคลั่งในโปรไฟล์ของคุณ แต่จากนั้นคุณจะได้รับสีสันที่ยอดเยี่ยมเมื่อคุณอยู่ในพื้นที่เก็บข้อมูลคอมไพล์จริง ๆ ในขณะที่คุณสีปกติอื่น ๆ :) โปรดทราบว่าคุณต้องใช้เครื่องหมายคำพูดเดี่ยวรอบการกำหนด PS1 คุณไม่ต้องการให้ตัวแปรขยายเมื่อกำหนด PS1; คุณต้องการให้พวกเขาขยายตัวเมื่อมีการประเมิน $ PS1 ในภายหลัง ดังนั้นคำพูดเดียว