ชื่อแท็บเทอร์มินัลหลังจากเซสชัน SSH


11

ใน Mac OS X (ฉันใช้ 10.6.8 แต่ฉันเชื่อว่าเวอร์ชั่นอื่นเหมือนกัน) การเปลี่ยนเครื่องรีโมตเปลี่ยนชื่อของแท็บปัจจุบันในเทอร์มินัล น่ารำคาญเมื่อฉันตัดการเชื่อมต่อจากเครื่องระยะไกลไม่ว่าจะด้วยexitหรือหมดเวลาอย่างชัดเจนชื่อของแท็บจะไม่เปลี่ยนกลับไปเป็นเหมือนเดิม

เกือบทุกวันสิ่งนี้ทำให้ฉันเป็นโรคหัวใจเมื่อฉันพิมพ์คำสั่งหรือคำสั่งอื่น ๆ เพื่อดูจากมุมตาของฉันว่าแท็บนั้นยังคงชื่อ user @ remotehost ฉันเป็นผู้ใช้ที่ระมัดระวังที่มักจะมีpwdฯลฯ เพื่อยืนยันตำแหน่งของฉันก่อนที่จะทำอะไร แต่ก็ยังคงจับฉันในช่วงเวลาแห่งความตื่นตระหนกเมื่อฉันทำDROP DATABASE xและฉันเห็นชื่อโฮสต์ระยะไกลในแท็บ

เรื่องสั้นสั้นมีวิธีการเปลี่ยนชื่อนี้เมื่อตัดการเชื่อมต่อจากโฮสต์ระยะไกลหรือฉันจะต้องติดกับการเปิดแท็บใหม่ทุกครั้งที่ฉันยกเลิกการเชื่อมต่อเพื่อรีเซ็ตชื่อ?


ชื่อเทอร์มินัลก็ถูกรีเซ็ตเช่นกันเมื่อคุณออกจากโปรแกรมnpm
Awesome_girl

คำตอบ:


20

เพิ่มPROMPT_COMMANDของคุณ .bash_profile

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOSTNAME}\007';$PROMPT_COMMAND"

การPROMPT_COMMANDเรียกใช้งานจะเกิดขึ้นทุกครั้งที่มีการแจ้งเตือน

โปรดทราบว่าเรารวมPROMPT_COMMANDตัวแปรสภาพแวดล้อมที่มีอยู่เช่นว่าเราจะไม่สูญเสียการตั้งค่าที่มีอยู่ (เช่นupdate_terminal_cwd)


2
อย่าลืมเพิ่มรหัสของคุณใน PROMPT_COMMAND แทนที่จะแทนที่มันเช่นPROMPT_COMMAND="<your code>; $PROMPT_COMMAND"; มิฉะนั้นคุณจะปิดการใช้งานฟังก์ชั่นอื่น ๆ ที่ใช้ตัวแปรนี้ ตัวอย่างเช่น / etc / bashrc ใช้มันเพื่อตั้งค่าไดเรกทอรีการทำงานปัจจุบันของเทอร์มินัลดังนั้นเทอร์มินัลสามารถแสดงและใช้มันสำหรับการดำเนินการต่างๆ
Chris Page

@ChrisPage ไม่จำเป็นต้องมีรหัสใหม่มาก่อน$PROMPT_COMMANDเพื่อให้สามารถใช้งานฟังก์ชันอื่น ๆ ได้หรือไม่
reve_etrange

ทำไมไม่ใส่ลงใน PS1 โดยตรง
Yongwei Wu

นี่เป็นวิธีที่คุณแก้ไข.bash_profileหรือไม่ sublime $HOME/.bash_profile?
Awesome_girl

@Awesome_girl ตรวจสอบให้แน่ใจว่าคำสั่งมีการติดตั้งแล้วแก้ไขไฟล์จากสถานีของคุณโดยใช้subl subl ~/.bash_profileหากไม่มีคำสั่งนี้ให้ทำตามนี้: sublimetext.com/docs/2/osx_command_line.html
XtraSimplicity

2

ในการทำให้โซลูชันของ @ s01ipsist ทำงานร่วมกับ ZSH (เชลล์ใหม่บน macOS) คุณสามารถเพิ่มสิ่งนี้ใน~/.zshrc:

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOST}\007';$PROMPT_COMMAND"
precmd() { eval "$PROMPT_COMMAND" }

1

นี่คือสิ่งที่คุณจะต้องวางลงใน.bash_profileไฟล์ของคุณ นี่เป็นวิธีที่สะอาดกว่าและใช้แนวทางที่ Apple ทำเมื่ออัปเดตไดเรกทอรีการทำงานปัจจุบันของคุณ การตรวจสอบตัวแปรupdate_term_titleนั้นมีอยู่แล้วไม่จำเป็นจริง ๆ (เหมือนไม่มีใครเรียกbash -- login) แต่เพียงแสดงตัวเป็นยาม

if [ -z "$INSIDE_EMACS" ]; then
    # Update the terminal title on every prompt shown
    update_term_title() {
        # Print user@short-hostname once SSH quits.
        echo -ne "\033]0;${USER}@${HOSTNAME%%.*}\007"
        # Or ${HOSTNAME} if short host names aren't your taste
        # Or echo -ne "\033]0;\007" if you don't want anything.
    }
    # Check to see if update terminal title is present?
    if ! echo $PROMPT_COMMAND | grep -q update_term_title
    then
       # This function is not found in PROMPT_COMMAND, add it
       PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }update_term_title"
    fi
fi

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