创建一个自定义的波形符目录?

创建一个自定义的波形符目录?

一些背景故事:有一段时间我只是将我的个人文件和目录放在用户主目录中。然而,一直令人烦恼的是,它们与应用程序中的所有各种系统、配置和隐藏文件混合并交织在一起。

我认为不可能防止主目录中配置文件的混乱,因此我决定开始使用我的桌面目录。我的意思是,毕竟这就是它的目的。

现在的问题是我的提示很长,因为它们从~/projects/project1$~/Desktop/projects/project1$,我不喜欢。

我想知道是否有一种方法可以在 bash 中专门为我的桌面目录创建一个新的“~”波浪号目录?不幸的是,一个简单的符号链接是不够的,因为 id 希望能够在任何地方输入,它应该像〜的行为一样cd #显示在我的提示中#/projects/project1$

答案1

所以我不太明白如何真的创建一个自定义的类似波形符的目录(如果可能的话),但是我想出了如何伪造它,这对我的目的来说效果很好。

首先在 .bashrc 中创建 cd 的包装器,用特殊字符替换目录(在本例中我使用 ^):

#cd wrapper that substitutes ^ for ~/Desktop in the same way ~ works for $HOME
cd()
{
  local dir=''
  local input="${1}/" # forces / at the end of path used for substitution later
  case "${input}" in
    (^/*)
      dir="$HOME/Desktop/${input#*/}" ;;
    (*)
      command cd "$@"
      return
      ;;
  esac
  command cd "${dir}"
}

其次,您想要修改提示符,以便它显示特殊字符来代替$HOME/Desktop,这是通过将 PROMPT_COMMAND 设置为每次显示提示符时调用的函数来完成的,其中它只是手动执行替换(另请注意)照顾 ~ 因为否则不会发生)并将其插入到变量中PS1

#manually insert working directory in the prompt so i can substitute $HOME/Desktop with ^
update_ps1() 
{
  # Get the current working directory
  local current_dir=$(pwd)

  if [[ $current_dir == $HOME/Desktop* ]]; then
    substituted_dir="${current_dir/#$HOME\/Desktop/^}"
  else
    substituted_dir="${current_dir/#$HOME/\~}"
  fi

  PS1="\u@\h:$substituted_dir\$ "
}
PROMPT_COMMAND=update_ps1

注意:通过将其替换为自动完成功能,也可能使自动完成功能正常工作,但是我不需要将其用于我的个人目的。

无论如何,这实现了我一直在寻找的东西:

user@computer:~$ cd ^
user@computer:^$ pwd
/home/user/Desktop
user@computer:^$ cd projects
user@computer:^/projects$ 

相关内容