จะรวมชื่อเซสชันของหน้าจอใน hardstatus อย่างไร


17

ฉันใช้หน้าจอที่แตกต่างกันสำหรับโครงการต่าง ๆ screen -S project1หน้าจอเริ่มต้นเช่น ตอนนี้ฉันต้องการพูดถึง 'project1' ในบรรทัด hardstatus

ชื่อเซสชันสามารถได้รับจาก STY STY=13539.project1ตัวแปรสภาพแวดล้อม:
แต่จะนำมันเข้าสู่หน้าจอได้อย่างไร? ฉันได้ลองคำสั่ง backtick และ% `ใน hardstatus แล้ว แต่ฉันไม่สามารถทำให้ถูกต้องได้

ฉันทำอะไรลงไป:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

ไม่มีโชคว่างเปล่า% '

backtick 0 30 30 sessionname

ยังไม่มีโชคชื่อเซสชัน: ไม่พบ

คำตอบ:


18

คุณสามารถรวมสตริงนี้ (พร้อมข้อมูลเพิ่มเติมหากต้องการ) ใน$PS1:

\[\e]0;$STY\007

ภายในเครื่องหมายคำพูดเดี่ยวเพื่อชะลอการประเมินตัวแปร จากนั้นเพิ่มลงในของคุณ~/.screenrc:

hardstatus string '%H:%h'

ขออภัยscreenไม่ได้ตั้งค่า$STYในสภาพแวดล้อมของคำสั่งที่วางไข่สำหรับbacktickคุณสมบัติ

ตัวเลือกอื่นแทนที่จะเป็นตัวเลือกด้านบน:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

ข้อได้เปรียบของอันนี้ก็คือมันเป็นไปตามการเปลี่ยนแปลงที่ทำโดยใช้sessionnameคำสั่ง ตัวเลือกแรกไม่ได้

แก้ไข:

จากที่นี่ :

เนื่องจาก $ STY ยังไม่ได้ตั้งค่าเมื่อแหล่งที่มาของหน้าจอ. screenrc คุณสามารถใช้เคล็ดลับนี้ใน. screenrc ของคุณ:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

เช่นส่งคำสั่งหน้าจอไปที่หน้าต่างแรก


1
สำหรับวิธีแก้ปัญหาที่เริ่มต้นด้วยbacktick: (1. ) backtickbash builtin คืออะไร? คำสั่ง gnu-screen? ปฏิบัติการไบนารี? มีหน้าคนหรือไม่ (2. ) ฉันรู้ว่ามันใช้งานได้เพราะฉันลองแล้ว แต่คุณจะได้รับคำสั่งสองบรรทัดในการดำเนินการอย่างไรเมื่อดูเหมือนว่า.screenrcไวยากรณ์gnu-screen ต้องการหนึ่งบรรทัดสำหรับhardstatusคำสั่งหรือไม่ (3. ) ฉันจะแก้ไขคำสั่งของคุณเพื่ออนุญาตให้ผนวกข้อความหลังจากชื่อเซสชันได้อย่างไร
เทรเวอร์บอยด์สมิ ธ

@TrevorBoydSmith: backtickเป็นscreenคำสั่ง screenค้นหาในหน้าคนสำหรับ อาจเป็นการดีที่สุดถ้าคุณโพสต์คำถามใหม่เกี่ยวกับสิ่งที่คุณถาม ฉันไม่คิดว่าเอาต์พุต hardstatus สามารถใช้สองบรรทัดบนหน้าจอได้ คุณสามารถใช้sedหรือawkแทนที่จะgrepทำสิ่งที่grepทำในตัวอย่างของฉันและเพิ่มข้อความพิเศษบางส่วน
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

เมื่อฉันพูดว่า "สองบรรทัด" ให้ฉันทบทวนสิ่งที่ฉันหมายถึงฉันไม่ต้องการให้แสดงสองบรรทัดสำหรับ hardstatus ฉันสับสนโดย%` และสิ่งที่backtickอยู่ในบรรทัดแยกกัน ... พวกเขาไม่ได้ดูเกี่ยวข้อง แต่ตอนนี้ฉันอ่านเอกสารสำหรับbacktickฉันเห็นว่าทั้งสองเกี่ยวข้อง / จำเป็น / ถูกต้อง - ไวยากรณ์ (แม้ว่า IMO ค่อนข้างแปลกไวยากรณ์)
เทรเวอร์บอยด์สมิ ธ

3

สำหรับฉันมันใช้งานได้ง่ายกับการแทรก%Sใน hardstatus

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

อย่างไรก็ตามสิ่งนี้จะแสดงชื่อเซสชันที่ไม่มี ID (เช่น${STY#*.}); ในตัวอย่างของคุณ: project1.

(คำตอบเดียวกันกับคำถามอื่น ๆที่นี่และที่นี่เพื่อความสมบูรณ์)


2
FYI, "% S" ทำงานบน gnu-screen รุ่นใหม่กว่า (ทำงานบน Fedora 21 สำหรับฉัน) แต่ไม่ใช่รุ่นที่เก่ากว่า (ไม่ทำงานบน CentOS 6 เวอร์ชันสำหรับฉัน)
เทรเวอร์บอยด์สมิ ธ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.