แสดงชื่อเซสชันหน้าจอ GNU และชื่อหน้าต่างใน shell prompt


11

มีวิธีที่จะนำเสนอชื่อเซสชั่นหน้าจอ GNU และชื่อหน้าต่างในการแจ้งของเปลือก (ให้เราบอกว่า Bash ให้โดยกำหนดPS1)

คำตอบ:


14

หน้าจอป้อนตัวแปรสภาพแวดล้อมบางอย่าง (จากscreen(1) manpage):

STY              Alternate socket name.
WINDOW           Window number of a window (at creation time).

"เวลาสร้าง" หมายความว่าหากคุณเปลี่ยนหมายเลขหน้าต่าง (โดยใช้numberคำสั่งของหน้าจอ) เชลล์จะไม่ถูกบอกเกี่ยวกับการเปลี่ยนแปลงและ $ WINDOW จะยังคงเหมือนหมายเลขหน้าต่างแรก

คุณสามารถใช้สิ่งที่ชอบ:

PS1='\u@\h(${STY}:${WINDOW}):\w$ '

1
ที่สมบูรณ์แบบ! นี่คือสิ่งที่ฉันกำลังมองหา BTW มีวิธีรับชื่อหน้าต่างแทนหมายเลขหน้าต่างหรือไม่
brandizzi

ไม่ใช่ที่ฉันรู้ไม่มี api สำหรับหน้าจอและเมื่อคุณออกคำสั่งไม่มีผลลัพธ์ - มันจะไปที่หน้าต่างปัจจุบันในหน้าจอ screen -xr 2466 -X windowsเช่น
Arcege

แม้ว่ามันอาจจะตกอยู่ภายใต้การจัดเรียงหมายเลขใหม่ แต่มีวิธีเข้าถึงชื่อของหน้าต่างCtrl-a Aหรือไม่ถ้ามันถูกตั้งค่าด้วย?
Thalis K.

1
หาก GNU screenได้รับการเรียบเรียงด้วย-Q(แบบสอบถาม) ตัวเลือกแล้วคุณสามารถเรียกใช้คำสั่งบางอย่างเช่นtitleและwindowsและมีการแสดงผลข้อมูลที่ stdout อย่างไรโดยไม่ต้องขึ้นบรรทัดใหม่
Arcege

3

ฉันมักจะใช้ชื่อเซสชันหน้าจอที่แม่นยำเสมอ จากนั้นฉันสามารถเพิ่ม STY env var ของหน้าจอโดยดึงรหัสตัวเลข (ขอบคุณ dimo414) ไปที่ PS1 ฉันไม่ตกแต่งด้วยเครื่องหมายปีกกาหรืออะไรเพราะฉันไม่ได้อยู่ในเซสชั่นเสมอ ตัวอย่างง่ายๆ:

PS1='\u@\h ${STY#[0-9]*.} \w$ '

1

ฉันใช้สิ่งนี้:

(`echo ${STY} | sed -e 's/[0-9]*\.//g'`:${WINDOW}:`screen -Q title`)

ลบหมายเลขกระบวนการจากการ${STY}
รวมหมายเลขหน้าต่าง (ตามที่กล่าวถึง "ณ เวลาสร้าง")
รวมถึงชื่อหน้าต่าง (ตามที่ส่งคืนจากscreen -Q title)

บันทึก:

  • ครั้งแรกที่มันทำงานscreen -Qรอการกดแป้นกลับ
  • ฉันตั้งชื่อหน้าต่างด้วย Ca CA แล้วเลือก. profile ของฉันเพื่ออัพเดทพรอมต์

5
ใช้หลีกเลี่ยงการต้องผ่านท่อ${STY#[0-9]*.} sed
dimo414
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.