我试图让screen
设置我的xterm
标题。 我在screen
外工作,但screen
保持任何标题,当我开始它。 这是我的.bashrc
:
函数bash_prompt_command(){ #$ PWD应该保留多less个字符 本地pwdmaxlen = 25 #表示已经有dir截断 本地trunc_symbol =“..” 本地dir = $ {PWD ## * /} pwdmaxlen = $(((pwdmaxlen <$ {#dir})?$ {#dir}:pwdmaxlen)) NEW_PWD = $ {PWD /#$ HOME / \〜} 本地pwdoffset = $(($ {#NEW_PWD} - pwdmaxlen)) 如果[$ {pwdoffset} -gt“0”] 然后 NEW_PWD = $ {NEW_PWD:$ pwdoffset:$ pwdmaxlen} NEW_PWD = $ {trunc_symbol} / $ {NEW_PWD#* /} 科幻 导出NEW_PWD } PROMPT_COMMAND = bash_prompt_command #颜色图表@ http://wiki.archlinux.org/index.php/Color_Bash_Prompt 在“$ {TERM}”的情况下 “的xterm”) TITLEBAR ='\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]' PS1 =“$ {TITLEBAR} \ [\ E [1;32米\] [\ E [0;36米\] \ U \ E [1;32米\] @ \ E [1;33米\] \ħ\ E [ 1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m“ ;; “屏幕”) TITLEBAR ='\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]' ESC = '\ [\ EK。\ E \\\]' PS1 =“$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ $ {ESC} \ [\ e [0m“ ;; *) PS1 =“\ [\ E [1;32米\] [\ E [0;36米\] \ U \ E [1;32米\] @ \ E [1;33米\] \ħ\ E [1;32米\ ]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m“ ;; ESAC
这里是我的.screenrc
:
hardstatus alwayslastline hardstatus string%{= kg} [%{Y}%H%{g}] [%=%{= kw}%?% - Lw%?%{= b kR} (%)%(%)%(%)%(%)%(%)% {g} [%{B}%m。%d。%Y%{G}%c%{g}]' termcapinfo xterm | xterms | xs | rxvt ti @:te @ termcapinfo xterm'hs:ts = \ E] 2;:fs = \ 007:ds = \ E] 2; screen \ 007' 在屏幕上 shelltitle'$ | bash'
我做错了什么?
更新(2010年8月19日):问题在于,当您设置alwayslastline
时,您无法从屏幕内更新terminal的标题。 所以我的解决办法就是放弃,为我的屏幕会议预定一个有用的标题。 我更新的.bashrc
和.screenrc
可以在http://bitbucket.org/jsumners/rcfiles/srcfind。
屏幕内的转义码是不同的 。
屏幕外部:
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
相当于这个里面的屏幕:
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'
改变你的情况$ {TERM} =“屏幕”标题栏
TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'
将解决你的问题。
实际上,有一种方法可以将转义序列直接发送到xterm,通过屏幕。 这并不容易find,但从屏幕代码(src / ansi.c)我认为它自2005年以来一直在那里。我有它在xterm,Gnometerminal和腻子工作。 我发现了一个注释,说明它不能在那里工作,因为它们不处理DCS(除非它最近被修复了)。
从下面的屏幕文档(在http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html )
ESC P (A) Device Control String Outputs a string directly to the host terminal without interpretation.
ANSI DCS(设备控制string)是一个转义代码,用于直接发送到terminal(我认为这是它多年前的原始目的)。 这样的string以ST转义码(String Terminator)结束。
包装string以将terminal的窗口标题设置在DCS..ST块内,并且即使在hardstatus alwayslastline的情况下也能正确地更新屏幕和更新。
DCS = \ 033P,ST = \ 033 \
示例 – 使用当前工作目录更新窗口标题
NEW_TITLE="\033]0;${PWD/$HOME/~}\007" echo -ne "\033P${NEW_TITLE}\033\\"
迟到总比不到好! 希望这有助于某人。
以防万一我的屏幕来源更改错误:我正在运行最新的屏幕会话混帐,而这又是使用几乎最新的屏幕混帐(一些特定于屏幕会话的变化)。 但日志消息的date是从2005年的屏幕(如果你克隆屏幕git回购并使用下面的命令,你可以看到对DCS处理提交的更改)。
git clone git://git.savannah.gnu.org/screen.git git difftool e6618a14^! src/ansi.c
crb是对的,但是
a)他使用的转义码不适用于我。 它应该是\033k
而不是\033_
。 请参阅"TITLES (naming windows)"
下的screen (1)
。 所以它应该是:
PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME}: ${PWD}\033\\"'
b)这种转义只用于设置屏幕窗口的标题。 屏幕的一个实例可以有多个窗口,每个窗口都有一个名字,这就是在hardstatus
显示的hardstatus
和带有t
转义序列的caption
。
c)如果在.screenrc
为xterm设置正确的terminfo,则正常的bash转义工作:
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
(这也works on my machine
腻子)
所以为了为屏幕窗口和putty / xterm标题设置正确的标题,我使用了如下的东西:
XTERM_TITLE="${USER}@${HOSTNAME}: ${PWD}" SCREEN_TITLE="${PWD}" PROMPT_COMMAND='echo -ne "\033]0;$XTERM_TITLE\007\033k$SCREEN_TITLE\033\\"'
以供参考: http : //tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html
我不打算完全回答这个问题,但让我提出解决问题的方法。 许多窗口pipe理器支持EWMH规范。 还有一个命令行工具wmctrl
能够与他们交互。 使用这个工具,用下面的命令可以很容易地改变活动窗口的标题:
wmctrl -r :ACTIVE: -T "FooTitle"
也可以更改窗口图标,布局和其他属性。由于Windows不支持EWMH,所以该工具可能不适用于PuTTY,但大多数Linux系统都应该接受它。
使用这种方法,无论您是否使用screen
无关紧要。
最近2周,我search了很多论坛,我还没有find这个问题的答案:
如何获得所有命令输出到腻子标题?
它需要它为其他程序知道什么时候在服务器上的一些工作完成,是对的还是错的。 Plink的标准输出和标准input不工作,我用了很多等待延迟和一些命令,而不是为别人工作的调整。 XSEL和XCLIP无法安装在该服务器上。
所以这里是解决scheme:
在腻子客户端和suse服务器上看起来像这样:
ls /home | grep domagaja > logutoit.txt echo -e "\033]0\\;$(cat logutoit.txt)\\007\\c"
希望有人能够使用这个。 它不适用于所有的服务器types和腻子客户端设置,当然,但这个想法应该运作良好。