특정 디렉토리에 "cd"하면 자동으로 파일 가져오기

특정 디렉토리에 "cd"하면 자동으로 파일 가져오기

내 요구 사항에 맞게 모든 디렉터리에서 충분히 일반적인 여러 유틸리티 명령과 별칭이 있습니다. 그러나 "build"와 같이 사용자 지정 동작이 필요한 특정 디렉터리가 있습니다.

이를 위해 동일한 이름을 가진 함수와 별칭을 수정하여 이 디렉터리에 다른 파일을 만들었습니다(그래서 새 이름을 기억할 필요가 없습니다).

현재 특정 디렉터리로 CD를 복사한 후 수동으로 파일을 가져옵니다.

source custom_aliases_n_fns

이것은 잘 작동하지만 이 파일 소스를 자동화하고 싶습니다.

파일 소스를 특정 디렉토리로 CD로 보내는 방법이 있습니까?

참고: 시스템 전체의 사용자 별칭을 변경하고 싶지 않았기 때문에 이 접근 방식을 사용했습니다.

답변1

현재 작업 디렉터리가 변경될 때마다 호출되는 특수 후크 함수를 zsh사용할 수 있습니다 .chpwd

custom_aliases_n_fns_already_sourced=false
chpwd() {
  if
    ! $custom_aliases_n_fns_already_sourced &&
      [[ $PWD = /some/dir && -f custom_aliases_n_fns ]]
  then
    source ./custom_aliases_n_fns
    custom_aliases_n_fns_already_sourced=true
  fi
}

맹목적으로 문서를 구매하는 것을 권장하지 않습니다어느디렉토리(그래서 확인 $PWD = /some/dir)는 남용될 수 있습니다.

고유한 후크를 변경하는 것 외에도 chpwd다음을 수행할 수도 있습니다.

myhook() {
  if
    [[ $PWD = /some/dir && -f custom_aliases_n_fns ]]
  then
    source ./custom_aliases_n_fns
    chpwd_functions[(Ie)$0]=() # remove ourselves from the array
  fi
}
chpwd_functions+=(myhook)

이를 통해 현재 작업 디렉터리가 변경될 때 여러 후크 함수를 호출할 수 있습니다. 여기서는 파일을 가져왔는지 여부를 기록하지 않고 대신 chpwd파일을 가져온 후 후크 목록에서 함수를 제거합니다.

답변2

테스트되지 않은

대상 디렉토리에 빈 줄이나 #comments가 없는 명령이 .myaliases포함된 파일이 있습니다.alias foo=bar

당신의 ~/.bashrc:

function cd() {
if [[ -f ./.myaliases ]] ; then
  sed -e 's/^/un/;s/=.*$//' ./.myaliases >/tmp/myaliases.$$
  source /tmp/myaliases.$$
  rm /tmp/myaliases.$$
fi

builtin cd "$*"

if [[ .f ./.myaliases ]]; then
 source ./.myaliases
fi

먼저 현재 디렉터리에 파일이 있는지 확인하고 .myaliases, 그렇다면 해당 파일의 별칭을 해제하여 새 디렉터리로 깔끔하게 이동할 수 있습니다. 그런 다음 대상 디렉터리로 이동한 후 .myaliases거기에 파일이 있는지 확인하고 파일이 있으면 파일을 가져옵니다. 자세한 내용을 읽어보세요 man bash.

답변3

어쩌면 이 템플릿과 같은 것이 있을까요?
.bashrc에서:

PS1+='$([ \w = ~ ] && command || another command)'

환경 변수 $PWD와 이스케이프 힌트 \w시퀀스가 ​​모두 유효합니다. 이것은 당신이 찾고 있는 것과 꽤 일치하지만 일반적으로 올바른 방법을 잘 모르겠습니다.

관련 정보