ors*_*iro 28 bash window-title urxvt
我正在寻找一种根据命令输入动态设置 urxvt 窗口标题的方法。
让我们举个例子。
如果我mplayer http://66.197.229.245:8082在 urxvt 窗口中运行,我希望将此窗口的标题设置为mplayer http://66.197.229.245:8082或者更好Terminal | mplayer。
或者,如果我运行,journalctl -b我希望将窗口标题设置为Terminal | journalctl -b或更好Terminal | journalctl。
这可能吗?
slm*_*slm 33
假设你使用 Bash 作为你的 shell,你可以设置这个变量。
PROMPT_COMMAND='echo -ne "\033]0;Terminal | mplayer\007"'
Run Code Online (Sandbox Code Playgroud)



如果您想要更精细的标题栏,那么您可以使用此方法在标题栏中动态设置当前正在运行的命令。
$ trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
Run Code Online (Sandbox Code Playgroud)


例如,为了得到你想要的东西,你需要做一些工作来解析可执行文件的名称。因此,您必须就您想要命令的哪个部分做出一些决定。您可以使用.. | awk '{print $1}'来获取命令的名称。
如果您想通过您的/etc/bashrc或$HOME/.bashrc文件将此作为默认行为,您可能需要遵循此 SO Q&A 中@simon 的建议,标题为:Bash - 通过运行第二个命令更新终端标题。
西蒙的回答如下:
function settitle () {
export PREV_COMMAND=${PREV_COMMAND}${@}
echo -ne "\033]0;${PREV_COMMAND}\007"
export PREV_COMMAND=${PREV_COMMAND}' | '
}
export PROMPT_COMMAND=${PROMPT_COMMAND}';export PREV_COMMAND=""'
trap 'settitle "$BASH_COMMAND"' DEBUG
Run Code Online (Sandbox Code Playgroud)
正如此 SO Q&A 中所引用的,标题为:Why is my DEBUG trap execution (w/ content redirected) in { echo foo; 回声条;>文件?
@Charles Duffy 有一个答案,它建议将输出重定向到STDERR甚至更好/dev/tty。他的回答对这两种方法都有很好的指导。