현재 작업 디렉토리에 따라 다른 별칭을 사용하고 싶습니다(또는 다른 이름을 가진 동일한 별칭). 예를 들어, l
몇 가지 추가 옵션에 대해 약어를 사용하고 싶을 수도 있습니다 . ls
두 가지 변형을 사용하고 싶습니다.
alias l="ls --sort=extension" # variant A
alias l="ls --quoting-style=literal" # variant B
일반적으로 변형 A를 사용하고 싶습니다. 그러나 이미지를 나열할 때 변형 B를 사용하고 싶습니다. 즉, 작업 디렉터리가 ~/pictures
.(이것은 최소한의 예일 뿐입니다. 실제 사용 사례는 더 복잡합니다.)
l()
의 출력에서 대소문자를 구분하는 함수를 간단하게 작성할 수 있다는 것을 알고 있습니다 $(pwd)
. 그러나 나는 별칭을 변경하지 않고 특정 디렉터리의 이름을 바꿀 수 있는 보다 강력한 솔루션을 원합니다 .zshrc
. (그리고 이로 인해 문제가 발생하지 않습니다.)
하지만 가능합니까?씌우다또는다음에 추가.zshrc
별칭 (예: vim 및 local 과 마찬가지로 관련 디렉터리에 local 설정 .vimrc
)?
또한 bash나 다른 쉘에서도 가능합니까?
답변1
당신이 사용하는 경우아 맙소사, 그냥 활성화하세요dotenv
끼워 넣다:
plugins+=(dotenv)
ZSH_DOTENV_FILE=.any-name-you-like-for-the-per-directory-alias-file
또한 고려디렌프, 각 디렉토리의 환경 변수를 내보낼 수 있습니다 .envrc
.그리고떠날 때 취소하세요(불가능 dotenv
). direnv는 널리 사용되는 모든 쉘과 호환됩니다. 그러나 그렇지 않습니다지금별칭이나 함수를 정의할 수 있습니다.
여전히 결합할 수 있습니다Irkacho의 방법direnv를 사용하면 direnv에서 설정한 하나 이상의 환경 변수를 기반으로 수행할 작업을 결정하는 함수(별칭이 아닌)를 생성할 수 있습니다.
두 가지 방법 모두 도트 파일이 있는 디렉터리를 수동으로 허용 목록에 추가하여 보안 문제를 처리합니다.
답변2
현재 디렉터리의 특정 파일을 확인하고 이에 따라 동작을 변경하는 함수나 스크립트를 만들 수 있습니다.
l() {
if [ -f ./.ls-literal-quote ] ; then
ls --quoting-style=literal "$@"
else
ls --sort=extension "$@"
fi
}
이와 같은 기능을 사용하면 중앙 집중식 위치가 아닌 디렉터리 자체에 구성을 유지할 수 있습니다(원하는 경우).
이제 관련 디렉터리에 추가 파일을 분산시켜야 하지만 다음을 사용하여 이 문제를 해결할 수 있습니다.확장된 속성(귀하의 시스템이 지원하는 경우)
답변3
이를 달성하기 위해 프로젝트를 개발 중입니다. 확인 해봐:지역 별칭.
이를 통해 정의된 디렉터리에 로컬로 의사 별칭과 함수를 만들고 사용할 수 있습니다. 아마도 가장 좋은 점은 위험한 "소스" 명령을 실행하지 않고 이 작업을 수행한다는 것입니다. 이러한 솔루션은 더 간단하고 빠르지만 보안 문제가 심각합니다.
다음은 데모입니다:
답변4
물론입니다. 테스트를 수행하는 일부 셸 코드로 별칭을 확장하면 됩니다.
alias l="[[ $PWD =~ /pictures$ ]] && ls --quoting-style=literal || ls --sort=extension"