linux 如何编辑$PS1变量,使bash命令的输出是命令之外的另一种颜色?[已关闭]

disho6za  于 2022-12-26  发布在  Linux
关注(0)|答案(1)|浏览(99)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

这个问题似乎与help center中定义的范围内的编程无关。
3天前关闭。
Improve this question
如何编辑$PS1变量,使bash命令的输出颜色与命令颜色不同?
例如,我希望命令为黑色,输出为绿色。
username$ seq 1 3
1
2
3
在上面的例子中,我希望seq 1 3是黑色的,输出数字是绿色的。
这是我当前的$PS1变量:\[\e[1;0:31m\]\u \[\e[m\] \[\e[1;0:36m\] \@ \[\e[m\] \[\e[1;0:32m\]\W $ \[\e[m\]

np8igboo

np8igboo1#

我提供了我的解决方案。它不仅给提示着色,而且打印当前目录,如果目录太长,则打印缩写:

function getPS1path()
{
    local p="$PWD"
    local len=${#HOME}
    (( $len > 3 )) && [[ ${p:0:$len} == $HOME ]] && p="~${p:$len}"

    local max="${PS1_MAX_PATH//[!0-9]}"
    [[ $max = "" ]] && max=$(( $(stty -a | tr \; '\n' | awk '$1=="columns" {print $2}')/3 ))
    (( max < 20 )) && max=20
    (( max > 50 )) && max=50

    local i x pre=
    for (( i=0; i<30; i++ ))
    do
        len=${#p}
        (( len <= max )) && break
        x="${p#*/}"
        [[ $x = "" || "$x" = "$p" ]] && break
        p="$x"
        pre=".../"
    done
    echo -n "$pre$p"
}

[[ $origPS1 = "" ]] && origPS1="$PS1"
newPS1=$'\\[\e[1m\e[31m\\]\\h:$(getPS1path) # \\[\e[m\017\\]'
PS1="$newPS1"

变量origPS1newPS1设置为在其他脚本中使用。

相关问题