ฉันจะป้องกันหน้าจอ GNU จากการรีเซ็ตพรอมต์ของฉันได้อย่างไร [ปิด]


13

เมื่อฉันเรียกใช้หน้าจอมันเปลี่ยนพรอมต์ของฉัน ฉันจะป้องกันพฤติกรรมนี้ได้อย่างไร ตัวอย่างเช่น:

$ echo $PS1
\[\e]0;\h:Prod\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$
$ screen
$ echo $PS1
[\u@\h \W]\$

น่าสนใจมันไม่ได้ทำในเครื่องอื่น เครื่องที่มีปัญหาคือ Redhat 4 update 4 พร้อม Screen version 4.00.02 (FAU) 5-Dec-03

คำตอบ:


16

ลองเพิ่ม (สมมติว่ายังไม่มีอยู่) ในไฟล์. screenrc ของคุณ:

เชลล์ - $ SHELL

สิ่งนี้จะให้เชลล์ล็อกอินแก่คุณเมื่อคุณเริ่มต้นเซสชันหน้าจอหรือสร้างเทอร์มินัลอื่นจากภายในหนึ่ง


1
ฉันมี 'shell / bin / bash' ใน. screenrc ของฉันดูเหมือนว่าควรเป็น 'shell - / bin / bash' หรือสิ่งที่คุณให้ไว้
Swoogan

2

การแจกแจงจำนวนมากตรวจสอบชนิดของเทอร์มินัลก่อนตั้งค่าพรอมต์ ยกตัวอย่างเช่นอูบุนตูมีอัญมณีเล็ก ๆ นี้ใน. bashrc เริ่มต้น:

# ตั้งค่าพร้อมท์แฟนซี (ไม่ใช่สียกเว้นว่าเรารู้ว่าเรา "ต้องการ" สี)
กรณี "$ TERM" ใน
    xterm-color) color_prompt = ใช่ ;;
esac

เนื่องจากหน้าจอใช้ตัวแปร TERM ของตัวเอง ("หน้าจอ") ทุบตีคิดว่ามันไม่สามารถแสดงสีพร้อมท์แฟนซีได้ดังนั้นจึงใช้ค่าเริ่มต้นเป็นสีที่เรียบง่ายกว่า แน่นอนว่าหน้าจอมีความสามารถอย่างเต็มที่ในการแจ้งเตือนที่ซับซ้อนเช่นเดียวกับขั้วปกติ

ดังนั้นเพื่อลบล้างพฤติกรรมนี้เพียงแค่ตั้งค่าตัวเลือก PS1 ที่คุณต้องการท้าย~/.bashrcไฟล์ของคุณ หรือหากคุณรู้สึกอยากผจญภัยให้ค้นหาการทดสอบที่ตรวจสอบค่าของตัวแปร TERM และแก้ไขเพื่อยอมรับ "หน้าจอ" เพิ่มเติมจาก "xterm-color"


1

บางทีนี่อาจเป็นตัวแปรที่กำหนดเองซึ่งตั้งอยู่ในไฟล์ ~ / .screenrc?


1
ใช่ตรวจสอบ setenv PS1 ในหน้าจอส่วนกลางหรือส่วนบุคคล
รัศมี

4
และตัวแปรที่กำหนดเองจะเป็นอย่างไร หากคุณไม่ทราบคำตอบอย่าตอบ
Swoogan

0

มีปัญหาเดียวกัน (ไม่มีพรอมต์ที่กำหนดเองบนหน้าจอ) บนเครื่องที่มี SHELL -$SHELLและไม่มีsetenv PS1ใน screenrc และไม่มีการทดสอบพิเศษสำหรับเทอร์มินัล (ใบ้) ใน bashrc

การตั้งค่า $ TERM ที่ใช้:

$ echo $TERM
urxvt-unicode-256color

ใน screenrc ได้รับพรอมต์ที่กำหนดเองของฉันกลับมาในขณะที่อยู่ภายใต้หน้าจอ:

- #term xterm-256color
+ term urxvt-unicode-256color

PS: บัญชีอื่นไม่จำเป็นสำหรับสิ่งนี้ แต่การทดสอบ bashrc สำหรับ dircolors และเทอร์มินัลสมัยใหม่ด้วยวิธีนี้1 :

if [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] ; then
PS1=<my fancy prompt>

ฉันเชื่อว่าใช้งานได้เช่นกัน:

if [ "$TERM" != "dumb" ]; then
PS1=<my fancy prompt>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.