내 요구 사항에 맞게 모든 디렉터리에서 충분히 일반적인 여러 유틸리티 명령과 별칭이 있습니다. 그러나 "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
시퀀스가 모두 유효합니다. 이것은 당신이 찾고 있는 것과 꽤 일치하지만 일반적으로 올바른 방법을 잘 모르겠습니다.