ขึ้นอยู่กับวิธีการตั้งค่าสิ่งต่าง ๆ แต่โดยค่าเริ่มต้นสิ่งนี้จะทำงานได้
settitle() {
printf "\033k$1\033\\"
}
จากนั้นเรียกใช้:
settitle NEWTITLE
.
ดูเอกสารชื่อหน้าจอและหน้าจอ GNU คำถามที่พบบ่อยสำหรับรายละเอียดเพิ่มเติม
รับCtrl+ A Aจะเปลี่ยนมันจนกว่าคำสั่งต่อไปก็อาจจะถูกตั้งค่าโดย$PS1
(เปลือกทั้งหมด) หรือ$PROMPT_COMMAND
/ DEBUG trap
(ทุบตีเท่านั้น) หรือprecmd
/ preexec
(zsh เท่านั้น)
คุณควรมองหาสถานที่\e
หรือ\033
ปรากฏขึ้นพร้อมกับk
หรือ\\
หลังจากที่มัน, พื้นเช่นฉันsettitle
ตัวอย่างข้างต้น
UPDATE
preexec
คุณบอกว่าคุณมีกำหนดเอง
ทำไมไม่เปลี่ยนเป็น:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
จากนั้นคุณสามารถตั้งชื่อแบบกำหนดเองได้โดยเรียกใช้:
TITLE="my title"
และยกเลิกการตั้งชื่อโดยเรียกใช้
TITLE=
อย่าลืมเปลี่ยนprecmd
และ$PS1
ถ้าจำเป็น
นอกเหนือ
คุณยังสามารถขยายนี้เพื่อทุกขั้ว (เช่นxterm
, gnome-terminal
ฯลฯ ) โดยไม่ยากเข้ารหัสและ\ek
\e\\
นี่คือวิธีที่ฉันทำ:
terminit()
{
# determine the window title escape sequences
case "$TERM" in
aixterm|dtterm|putty|rxvt|xterm*)
titlestart='\033]0;'
titlefinish='\007'
;;
cygwin)
titlestart='\033];'
titlefinish='\007'
;;
konsole)
titlestart='\033]30;'
titlefinish='\007'
;;
screen*)
# status line
#titlestart='\033_'
#titlefinish='\033\'
# window title
titlestart='\033k'
titlefinish='\033\'
;;
*)
if type tput >/dev/null 2>&1
then
if tput longname >/dev/null 2>&1
then
titlestart="$(tput tsl)"
titlefinish="$(tput fsl)"
fi
else
titlestart=''
titlefinish=''
fi
;;
esac
}
# or put it inside a case $- in *i* guard
if test -t 0; then
terminit
fi
# set the xterm/screen/etc. title
settitle()
{
test -z "${titlestart}" && return 0
printf "${titlestart}$*${titlefinish}"
}
จากนั้นคุณสามารถเปลี่ยนpreexec
เป็น:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
Ctrl-A A
คำสั่งที่คุณให้ไม่ตรงกับสิ่งเดียวกับ และเกี่ยวกับพรอมต์คุณหมายถึงฉันต้องแก้ไข$PS1
ทุกครั้งที่ฉันต้องการให้ชื่อไม่เปลี่ยนแปลง?