ฉันต้องการตั้งค่าชื่อเทอร์มินัลเป็นuser@host
เพื่อให้ฉันสามารถบอกได้อย่างง่ายดายว่าเครื่องใดที่ฉันเชื่อมต่อกับจากชื่อหน้าต่าง มีวิธีทำสิ่งนี้จาก SSH หรือจากเทอร์มินัล GNOME หรือไม่?
ฉันต้องการตั้งค่าชื่อเทอร์มินัลเป็นuser@host
เพื่อให้ฉันสามารถบอกได้อย่างง่ายดายว่าเครื่องใดที่ฉันเชื่อมต่อกับจากชื่อหน้าต่าง มีวิธีทำสิ่งนี้จาก SSH หรือจากเทอร์มินัล GNOME หรือไม่?
คำตอบ:
ใช่. นี่คือตัวอย่างสำหรับการทุบตีโดยใช้ PS1 ที่ควรเป็นผู้ไม่เชื่อเรื่องพระเจ้า:
โดยเฉพาะอย่างยิ่งลำดับการหลบหนี\[\e]0; __SOME_STUFF_HERE__ \a\]
เป็นสิ่งที่น่าสนใจ ฉันได้แก้ไขสิ่งนี้เพื่อตั้งค่าตัวแปรแยกต่างหากเพื่อความชัดเจนมากขึ้น
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[\033]2;\u@\h\007\]'
if [ "$color_prompt" = yes ]; then
PS1="${TITLEBAR}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ "
else
PS1="${TITLEBAR}\u@\h:\W\$ "
fi
unset color_prompt force_color_prompt
นอกจากนี้โปรดทราบว่าสามารถตั้งค่าชื่อ xterm ได้หลายวิธีขึ้นอยู่กับว่าโปรแกรมเทอร์มินัลใดที่คุณใช้อยู่และเชลล์ตัวใด ตัวอย่างเช่นหากคุณใช้ Konsole ของ KDE คุณสามารถแทนที่การตั้งค่าชื่อได้โดยไปที่Settings
-> Configure Profiles
-> Edit Profile
-> Tabs
และตั้งค่าTab title format
และRemote tab title format
การตั้งค่า
นอกจากนี้คุณอาจต้องการตรวจสอบ:
\h
ข้อความดังกล่าวเฉพาะในกรณีที่$SSH_CLIENT
ไม่ว่างเปล่า
\[\e]2;\u@\h\a
ถ้ามันไม่ทำงานลองเพิ่มลำดับนี้ไปข้างหน้า: (แก้ไขการตอบกลับของฉันด้วยข้อมูลนั้นด้วย)
ต่อไปนี้เป็นเวอร์ชันของสคริปต์ทุบตี SSH ที่ฉันใช้ซึ่งตั้งค่าชื่อเซิร์ฟเวอร์และพรอมต์คำสั่งโดยไม่ทำการเปลี่ยนแปลงใด ๆ กับเซิร์ฟเวอร์ระยะไกล
my_ssh.sh:
#!/bin/bash
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
ssh -t $1@$2 "export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"
คุณสามารถเรียกใช้โดยการเรียกชื่อโฮสต์. / my_ssh.sh
การทำงานต่อไปนี้สำหรับฉัน (อาจใช้เฉพาะกับ gnome-terminal):
comp@home$ cat /usr/bin/ssh
#!/bin/bash
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"
โดยที่คำสั่ง ssh_bkup เป็นเพียง 'ssh' พื้นฐานที่มีชื่อที่เปลี่ยนแปลงซึ่งถูกเรียกใช้ทันทีหลังจากคำสั่ง echo เปลี่ยนชื่อของเทอร์มินัลปัจจุบัน
~/bin
มีความสำคัญในเส้นทางของฉันดังนั้นฉันวางสคริปต์ของคุณในของฉัน~/bin/ssh
มีความสำคัญในเส้นทางของฉันดังนั้นฉันวางสคริปต์ของคุณในของฉันแถวสุดท้ายเรียกอย่างชัดเจนว่า/usr/bin/ssh
แถวสุดท้ายอย่างชัดเจนเรียกร้องให้ด้วยวิธีนี้ผู้ใช้รายอื่นยังคงใช้มาตรฐานssh
เมื่อลงชื่อเข้าใช้ในเครื่องนั้นและ (เนื่องจากไดเรกทอรีหลักของเราอยู่บนเซิร์ฟเวอร์บัญชี LDAP) ฉันจะได้รับฟังก์ชันการทำงานที่เครื่องที่ฉันลงชื่อเข้าใช้
นี่เป็นรุ่นนามแฝง
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
SETPC="export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"
alias myssh='function _myssh(){ ssh -t $1@$2 $SETPC; };_myssh'