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

时间:2010-03-09 16:49:34

标签: git bash

我最近将这些行添加到我的〜/ .bashrc文件中,以显示当前分支,如果我在一个git工作文件夹中,并且它很适合。但是,我丢失的是当前文件夹名称曾经显示在我打开的终端的选项卡中,现在它不是:它总是只是说'终端'。我可以回来并仍然保留git的东西吗?这是有问题的行 - 这是问题的第二行,因为只注释第二行就可以解决问题。

source /etc/bash_completion.d/git
PS1='\h:\w$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ '

我一直在寻找PS1选项的解释,但在那里看不到有关终端窗口标题的任何信息。任何人都可以建议吗?谢谢,最大

修改

我实际上已经操纵了PS1,以便拥有格式为

的终端

<rvm version and gemset> <computer name> <current folder> <git branch>

,每个部分都有不同的颜色,但我以前从未真正看过这些文档,所以感谢你的链接。我当前的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,该脚本在脚本完成时被终止。

再次感谢所有人的帮助!

6 个答案:

答案 0 :(得分:5)

您可以尝试:

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

但是,在~/.bashrc/etc/bash.bashrc中了解PS1的设置会有所帮助。

答案 1 :(得分:4)

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

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

将PS1添加到此前面,它应该没问题

答案 2 :(得分:2)

如果您很幸运,您的终端与Xterm兼容,您可以使用ANSI序列设置终端标题。

我会指向documentation而不是给你序列。现在,您可以为提示着色。您需要的序列被描述为 xterm title hack 就是这样。

您还可以使用提示中的控制序列来帮助设置PS1。这些可以在PROMPTING下的BASH联机帮助页中找到。

以下是我.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 - 用户名
      • @ - @ sign
      • \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的东西。探索。

请记住,它只是一台电脑。你能做的最糟糕的事情是导致整个系统崩溃并删除所有有价值的工作,失去工作,成为一个绝望的贱民,他们唯一的收入来源就是询问客户是否需要薯条。除非,你在银行工作。那么你也可以打倒整个全球经济。

答案 3 :(得分:1)

对于truelly无助(像我一样)。这是我的Bash RC,它在提示符中包含git branch name并设置窗口标题。请注意,这使用了PROMPT_COMMAND用于__git_ps1,它在内部设置PS1。当以这种方式使用__git_ps1时,它需要2个参数。第一个参数是分支名称前面的字符串,第二个参数是分支名称后面的字符串。

#
# ~/.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]$>'

答案 4 :(得分:0)

另一种方法是使用PROMPT_COMMAND并让PS1成为提示符。例如:

PROMPT_COMMAND ='echo -ne“\ 033] 0; $ {USER} @ $ {HOSTNAME %%。*}:$ {PWD /#$ HOME /〜}”; echo -ne“\ 007”'

答案 5 :(得分:0)

我用这个:

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

会产生如下窗口标题:

/home/tkirk - tkirk@hostname