カスタムチルダディレクトリを作成しますか?

カスタムチルダディレクトリを作成しますか?

いくつかの裏話:しばらく私は個人のファイルとディレクトリをユーザーのホームディレクトリに入れました。しかし、いつも迷惑なのは、アプリケーションのさまざまなシステム、構成、および隠しファイルと混在して絡み合っていることです。

私は自分のホームディレクトリにある設定ファイルが複雑になるのを防ぐことは不可能だと思い、代わりにデスクトップディレクトリを使用することにしました。私の言葉は、結局それがまさにそれのためだということです。

今問題は私のプロンプト~/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$ 

関連情報