Answers:
(受此SU回答启发)
您可以结合一些bash技巧:
$BASH_COMMAND
保存当前正在执行的命令因此,捕获DEBUG并让处理程序将标题设置为$BASH_COMMAND
:
trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}" >&2' DEBUG
这将保持标题的更改,直到有其他更改为止,但是只要您$PS1
保持不变就不会有问题-启动命令,DEBUG处理程序更改标题栏,并在命令完成时bash绘制新提示并再次重置标题栏。
此处(也是SU答案来自的地方)的有用提示包括:
set -o functrace
这将使bash将DEBUG陷阱传播到您启动的任何子shell。否则标题栏将不会在其中更改
ssh
/dev/tty
stderr 会更好吗?
我从各种各样的帖子中探讨了自己的解决方案。这将创建一个标题,其中包含用户,主机名,pwd,tty和当前执行的命令(用于bash)。
看起来像这样(不执行命令):
.:[user@hostname:/home/user][pts/10]:.
像这样(执行命令):
.:[user@hostname:/home/user][pts/10] {tail -F /var/log/syslog}:.
在.bashrc中的某个地方,我扩展了PS1:
# set the terminals title. This is the "post-command" part,
# need to use a trap for pre-command (to add the command line to the title)
PS1+="\[\033]2;.:[\u@\h:\$PWD] [$(tty | cut -b 6-)]:.\007\]"
使用历史记录1和trap添加当前命令:
# set a fancy title (this is pre-command, in PS1 is after-command (to reset command)
trap 'echo -ne "\033]2;.:[${USER}@${HOSTNAME}:${PWD}] [$(tty | cut -b 6-)] {$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//g")}:.\007"' DEBUG
随时采用您的需求。
.bashrc
我的shell中的每个命令之后之后,我会得到此输出0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}
。我假设可以通过将trap命令分配给PS1
?来抑制此输出。但是,PS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
不起作用。导致错误bash: echo -ne "\033]0;$BASH_COMMAND\007": command not found
。