Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在尝试根据CWD更改bash提示符的颜色。Can';更改目录后无法更新它_Bash_Prompt_Truncate_Ps1 - Fatal编程技术网

正在尝试根据CWD更改bash提示符的颜色。Can';更改目录后无法更新它

正在尝试根据CWD更改bash提示符的颜色。Can';更改目录后无法更新它,bash,prompt,truncate,ps1,Bash,Prompt,Truncate,Ps1,我有两个存储驱动器,正在尝试将我的bashrc文件配置为: 如果cwd位于驱动器B上: 截断bash提示符,从第二个驱动器的/home目录开始 将bash提示符的颜色更改为红色,表示我正在另一个驱动器中工作 到目前为止,我已经能够用下面的代码完成颜色的更改,并且可以通过使用“\W”修饰符截断整个提示符以仅显示basename——但是我正在努力通过指定底部目录来修剪提示符_命令 即 /媒体/devj/2a24a03f-99a1-44bd-9a53-341zdd68334b/home/dev--

我有两个存储驱动器,正在尝试将我的bashrc文件配置为:

如果cwd位于驱动器B上:

  • 截断bash提示符,从第二个驱动器的/home目录开始
  • 将bash提示符的颜色更改为红色,表示我正在另一个驱动器中工作
到目前为止,我已经能够用下面的代码完成颜色的更改,并且可以通过使用“\W”修饰符截断整个提示符以仅显示basename——但是我正在努力通过指定底部目录来修剪提示符_命令

/媒体/devj/2a24a03f-99a1-44bd-9a53-341zdd68334b/home/dev-->/home/dev/

解决方案:谢谢您的帮助,这就是我最后要做的:

#Check if we are accessing my home folder from secondary drive
#If so change the color and trim the filepath to secondary /home
bash_prompt_command() {
    root_path=`pwd | awk -F/ '{print $(NF-(NF-2))}'`
    if [ $root_path = media ]; then #Shared drive
        #Trim path up to the home directory
        trim_path=${PWD#/media/devj/9a84a09e-80e9-44bd-9a53-342e3d48334c/}
        PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]$trim_path\[\033[38;5;214m\]$(parse_git_branch)\[\033[00m\]\$ '
    else
        PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[38;5;214m\]$(parse_git_branch)\[\033[00m\]\$ '
    fi
}

# init it by setting PROMPT_COMMAND
PROMPT_COMMAND=bash_prompt_command
trim_path=${PWD}/*/*/*/}


替换路径开头要忽略的任意多个目录。

在这里可能很有用。当您在驱动器A的某个子目录X中时,您希望提示符是什么样子?当你在驱动器B的某个子目录中时,你希望它是什么样子?谢谢你提示的提示,这正是我想要的。有没有办法检查当前工作目录离根目录有多深,这样我就可以动态更改PROMPT\u DIRTRIM的值。基本上,我希望驱动器a和驱动器b从每个驱动器的主目录开始看起来相同。如果我在驱动器B/dev/home/documents上的documents文件夹中,我希望它是这样的。/dev/home/documents要查看您有多深,可以在
bash\u prompt\u命令中计算当前目录路径中的斜杠数:
斜杠=${PWD/[!\/];深度=${#斜线}
然后将
PROMPT_DIRTRIM
设置为基于此的内容。您可以将其缩短为
trim_path=${PWD#/media/devj/9a84a09e-80e9-44bd-9a53-342e3d48334c/}