通过命令切换 gnome 终端提示字符串的格式?

Rot*_*eti 9 bash gnome-terminal

我的终端有一个这样的默认提示格式:

用户名@boxname /path/to/current/directory $

生成它的代码如下所示:(它也有一些颜色定义)

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
Run Code Online (Sandbox Code Playgroud)

如果当前目录的路径太长,使用终端会变得不愉快,因为您经常断行。在这种情况下,我更喜欢一种生成较短字符串的格式,如下所示:

用户名@boxname current_dir_name $

生成它的代码看起来像这样(再次使用颜色):

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
Run Code Online (Sandbox Code Playgroud)

有谁知道我可以很容易地切换从一个风格当前终端窗口的例如格式的,其他的只是打字:prompttoggle

Byt*_*der 10

将 long 和 shortPS1变量存储在不同的名称下:

PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
Run Code Online (Sandbox Code Playgroud)

确保PS1最初设置为其中之一:

PS1="$PS1long"
Run Code Online (Sandbox Code Playgroud)

然后你可以创建一个这样的别名来在两个 PS1 值之间切换:

alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'
Run Code Online (Sandbox Code Playgroud)

将所有四行添加到您的~/.bashrc文件中将使命令在您的 Bash 会话中可用,为了更容易复制,这里再次列出:

PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
PS1="$PS1long"
alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'
Run Code Online (Sandbox Code Playgroud)


hee*_*ayl 7

您可以使用一个小bash函数:

prompttoggle () { 
    if [[ $PS1 = *basename* ]]; then 
        export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
    else 
        export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
    fi ;}
Run Code Online (Sandbox Code Playgroud)

如果当前$PS1包含basename,则上述函数匹配,如果是,则设置PS1without basename,否则basename设置with 。

将该函数放入您的函数中~/.bashrc,使其在所有交互式会话中都可用。

例子:

foo@bar:~/spam/egg$ prompttoggle () { 
>     if [[ $PS1 = *basename* ]]; then 
>         export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
>     else 
>         export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
>     fi ;}

foo@bar:~/spam/egg$ prompttoggle 

foo@bar egg $ prompttoggle

foo@bar ~/spam/egg $
Run Code Online (Sandbox Code Playgroud)


Zan*_*nna 5

或者...制作两个非常小的函数并添加到您的末尾~/.bashrc

# short prompt
promptshort() { export PS1=$(echo "$PS1" | sed 's/\\w/\\W/g') ; }

# full length prompt
promptlong() { export PS1=$(echo "$PS1" | sed 's/\\W/\\w/g') ; }
Run Code Online (Sandbox Code Playgroud)

要缩短提示,请键入promptshort,要返回完整路径,请键入promptlong

\W仅显示当前工作目录,所以$(basename ${PWD})恕我直言是矫枉过正

您可以合并为一个函数,但“长”和“短”是描述性的,并且两者的击键次数都比“切换”少;)

与其添加一行来覆盖 PS1,我更喜欢调整设置它的代码(例如,取消注释force_color_prompt=yes并编辑 之后的行[ "$color_prompt" = yes ]; then