如何将终端标题更改为当前正在运行的进程?

Arc*_*ano 4 bash windows-terminal

我知道如何更改终端窗口标题。我想找出的是如何bashzsh写出当前正在运行的进程,所以如果我说这样做

$ ls -lF
Run Code Online (Sandbox Code Playgroud)

我会得到这样的标题

/home/me/curerntFolder (ls -lF)
Run Code Online (Sandbox Code Playgroud)

获取最后执行的命令会为时已晚,因为该命令已经执行,因此它不会使用已执行的命令设置标题。

Arc*_*ano 7

除了 @markp-fuso 的答案之外,我还介绍了如何使其与 Starship 一起使用。

\n
  function set_win_title() {\n    local cmd=" ($@)"\n    if [[ "$cmd" == " (starship_precmd)" || "$cmd" == " ()" ]]\n    then\n      cmd=""\n    fi\n    if [[ $PWD == $HOME ]]\n    then\n      if [[ $SSH_TTY ]]\n      then\n        echo -ne "\\033]0; \xef\xb8\x8f @ $HOSTNAME ~$cmd\\a" < /dev/null\n      else\n        echo -ne "\\033]0;  ~$cmd\\a" < /dev/null\n      fi\n    else\n      BASEPWD=$(basename "$PWD")\n      if [[ $SSH_TTY ]]\n      then\n        echo -ne "\\033]0; \xef\xb8\x8f $BASEPWD @ $HOSTNAME $cmd\\a" < /dev/null\n      else\n        echo -ne "\\033]0;  $BASEPWD $cmd\\a" < /dev/null\n      fi\n    fi\n\n  }\n  starship_precmd_user_func="set_win_title"\n  eval "$(starship init bash)"\n  trap "$(trap -p DEBUG |  awk -F"\'" \'{print $2}\');set_win_title \\${BASH_COMMAND}" DEBUG\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,这与Bash 指令中的自定义预提示和预执行命令不同,陷阱是在 后 starship init设置的。我已经在bug中指出了这一点。

\n