사용자 정의 물결표 디렉토리를 만드시겠습니까?

사용자 정의 물결표 디렉토리를 만드시겠습니까?

몇 가지 뒷이야기: 한동안 저는 개인 파일과 디렉터리를 사용자 홈 디렉터리에 넣었습니다. 그러나 항상 짜증나는 것은 애플리케이션의 모든 다양한 시스템, 구성 및 숨겨진 파일과 혼합되고 얽혀 있다는 것입니다.

나는 내 홈 디렉터리에 있는 구성 파일이 복잡해지는 것을 방지하는 것이 불가능하다고 생각하여 대신 데스크톱 디렉터리를 사용하기로 결정했습니다. 내 말은, 결국 그게 바로 그것 때문이라는 거죠.

이제 문제는 내 프롬프트 ~/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$ 

관련 정보