如何根据我正在工作的目录更改 PS1?

how to change PS1 based on what directory i`m working in?

我收到错误

-bash: test1.bash: line 5: syntax error near unexpected token `elif'
'bash: test1.bash: line 5: `elif [$PWD | grep /mnt/c/ !="" OR pwd | grep /mnt/d/ !=""] then

除了我写的代码,我什么都没试过

if [$PWD | grep /mnt/c/ =="" OR pwd | grep /mnt/d/ =="" OR pwd | grep /mnt/usb/ ==""] then
    export PS1="$(tput setaf 47)bob$(tput setaf 14):$(tput setaf 47)linux$(tput setaf 14)>"

elif [$PWD | grep /mnt/c/ !="" OR pwd | grep /mnt/d/ !=""] then
    export PS1="$(tput setaf 47)bob$(tput setaf 14):$(tput setaf 47)windows$(tput setaf 14)>"

else then
    export PS1="$(tput setaf 47)bob$(tput setaf 14):$(tput setaf 47)unknows$(tput setaf 14)>"
if

我希望我的 PS1 标记在挂载驱动器时发生变化,例如,如果我在目录 /mnt/c//mnt/d/ 中,我希望 PS1 更改为 windows

您似乎在寻找:

# much more efficient to just run this once rather than every single time you're going to
# change colors.
colors=(
  [14]="$(tput setaf 14)"
  [47]="$(tput setaf 47)"
)

set_prompt() {
  case $PWD in
    /mnt/c/*|/mnt/d/*) os_space=windows ;;
    /mnt/usb/*)        os_space=unknown ;;
    *)                 os_space=linux ;;
  esac
  PS1="${colors[47]}bob${colors[14]}:${colors[47]}${os_space}${colors[14]}>"
}
PROMPT_COMMAND=set_prompt

[ 不是 shell 语法——它是一个 命令 ,也可以在名称 test 下使用。与任何其他命令一样,您需要在其名称和参数之间放置一个 space,并且您只能使用该命令指定期望的参数。当您 运行 [ foo | bar ] 时,您只传递 [ 的第一个实例一个参数 foo,并将其标准输出连接到单独的命令 bar;这毫无意义,因为 test 不会向标准输出写入任何内容。