Bash PS1设置 - 如何将当前文件夹作为终端标题显示

8
我最近在我的~/.bashrc文件中添加了以下几行代码,以便在git工作目录中显示当前分支,这个功能很好用。但是,我失去的是当前文件夹名称曾经在我打开的终端标签上显示,现在它不再显示了:它总是只显示"Terminal"。我能否恢复这个功能并保留git信息?以下是相关的代码行 - 第二行是问题所在,仅注释掉第二行即可解决问题。
source /etc/bash_completion.d/git
PS1='\h:\w$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ '

我一直在查看有关PS1选项的解释,但是没有找到有关终端窗口标题的任何内容。 有人能给些建议吗?谢谢,Max。
编辑
实际上,我已经操纵了PS1,以便拥有格式为 <计算机名称> <当前文件夹> 的终端,每个部分都有不同的颜色,但我从未看过文档,所以感谢提供链接。 我目前的PS1设置为:
\[\033[0;31m\]$(__my_rvm_ruby_version)\[\033[0;33m\]\h\[\033[0;37m\]:\[\033[1;33m\]\W\[\033[1;32m\]$(__git_branch)\[\033[1;32m\]$(__git_dirty) \[\033[0;37m\]$

我可以做类似以下的事情:

export "<something> $PS1"

如何在不丢失现有设置的情况下设置终端选项卡名称。 我研究了一下,但没有成功。

编辑 - 在下面某些答案的帮助下,我弄清楚了这个问题 - 感谢大家!我将其包装到一个shell脚本中。

#!/usr/bin/env bash
#renames the current terminal tab via the PS1 env var
source ~/.bashrc
export PS1="$PS1""\[\e]0;$1 \a\]"

这个功能叫做“renametab”,所以现在我可以用例如下面的方式调用它:

source renametab mytabname

需要使用"source"将更改导出到当前shell:如果我只是执行renametab mytabname,则导出仅进入子shell,在脚本完成时被终止。
再次感谢所有人的帮助!

我个人在PROMPT_COMMAND中运行update_terminal_cwd - JBallin
6个回答

5

这是我在Ubuntu上终端标题的默认设置:

PS1='\[\e]0;\u@\h: \w\a\]'

在这个PS1前面加上以下内容,它应该就没问题了


以下是我所做的,以避免丢失当前的PS1设置:foo 应替换为实际值。 export PS1="$PS1"'\[\e]0;foo \a\]' - Max Williams

5

您可以尝试以下方法:

PS1="$PS1"'\h:\w$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ '

但是如果能知道在~/.bashrc或者/etc/bash.bashrc中之前设置的PS1是什么,会更有帮助。


这个非常好用 - 我喜欢引用现有变量!对于我的 .bashrc,我必须删除 \h:\w 以消除冗余条目:PS1="$PS1"'$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ ' - sage

2
如果您很幸运,您的终端可能兼容Xterm,并且您可以使用ANSI序列来设置您的终端标题。
我不会告诉您这个序列,但是我会指向 文档。现在,您可以为提示信息着色。您需要的序列被描述为xterm title hack
您还可以在提示符中使用控制序列来帮助设置PS1。这些可以在BASH手册的PROMPTING下找到。
这是我在.bashrc中的内容:
PS1="\e]0;BASH: \u@\h\aBASH \v: \u@\h:\w\n\$ "
  • \e]0;BASH: \u@\h\a - 设置窗口标题
    • \e] - 发送 ESC 字符,后跟右括号。这是 ANSI 命令序列的开始。
    • 0; - 零后面加上分号。下面的字符串设置标题。
    • BASH: \u@\h\ - 我的窗口标题
      • \u - 用户名
      • @ - @ 符号
      • \h - 主机名
    • \a - 结束我的标题的 BEL(Cnrl-G)信号
  • BASH \v: \u@\h:\w\n\$ - 设置我的提示符
    • BASH \v: - 字符串 BASH 后跟版本号。我的默认 shell 是 Ksh,所以当我使用 BASH shell 时,我想在提示符中看到单词 BASH
    • \u - 用户名
    • \h - 主机名
    • \w - 当前工作目录(基于 HOME)
    • \n - 换行符 - 我的提示符有两行。这样,长目录不会占用命令行空间。
    • \$ - 美元符号或 # 如果您拥有 root 权限。

尝试不同的转义序列。添加颜色。嵌入 GIT 内容。探索一下。

记住,它只是一台计算机。你能做的最糟糕的事情就是让整个系统崩溃并删除所有宝贵的工作,失去你的工作,并成为一个毫无希望的被社会遗弃者,唯一的收入来源是问客户是否需要薯条。除非你在银行工作。那么你也可以毁掉整个全球经济。


我没想到通过PS1变量会如此彻底地毁掉我的生活!;-) 感谢提供文档链接,也感谢没有说“rtfm noob lol”。请查看我在原始帖子中的编辑 - 谢谢! - Max Williams

1

对于像我这样真正无助的人。这是我的Bash RC,其中包括git分支名称在提示中并设置窗口标题。请注意,这使用PROMPT_COMMAND用于__git_ps1,它在内部设置PS1。当以这种方式使用__git_ps1时,它需要两个参数。第一个参数是分支名称之前的字符串,第二个参数是分支名称之后的字符串。

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

source ~/git/contrib/completion/git-prompt.sh

alias ls='ls --color=auto'
alias cd..='cd ..'

c_reset='\[\e[0m\]'
c_prompt='\[\e[1;31m\]'
c_path='\[\e[0;33m\]'

if [ -f ~/git/contrib/completion/git-prompt.sh ]; then
. ~/git/contrib/completion/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWCOLORHINTS=true
GIT_PS1_UNTRACKEDFILES=true
# Below, The section "\[\e]0;\w\a\]" sets the window title
PROMPT_COMMAND="__git_ps1 '${c_path}\w${c_reset}' '\n\u@\t${c_prompt}-->${c_reset}\[\e]0;\w\a\]' "
fi

#PS1 is set by the __git_ps1 script above, so comment out below
#PS1='\w\n[\u@\t]$>'

0

我使用这个:

PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/~} - ${USER}@${HOSTNAME}\007"'

这将导致一个窗口标题像这样:

/home/tkirk - tkirk@hostname

0

另一种方法是使用PROMPT_COMMAND,让PS1只作为提示符。例如:

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接