별칭이 있지만 go
다른 디렉터리에서 다른 작업을 수행하길 원한다고 가정해 보세요.
한 디렉터리에서는 실행되어야 cmd1
하지만 다른 디렉터리에서는 실행되어야 합니다.cmd2
그런데 위 디렉터리로 전환하기 위한 별칭이 이미 있는데 별칭 go
에 별칭 할당을 첨부 할 수 있습니까?foo
alias "foo=cd /path/to/foo"
OSX에서 bash(?)와 함께 작동합니다.
답변1
무엇을 요구하는지 완전히 확신할 수 없지만 별칭은 별칭에 있는 내용으로 확장됩니다. 별칭이 두 개 있는 경우 다른 명령, 심지어 별칭도 연결할 수 있습니다.
alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"
다른 경우에는 다음을 사용할 수 있습니다..bashrc
function go ()
{
if [ "$PWD" == "/path/to/foo" ]; then
cmd1
elif [ "$PWD" == "/path/to/go" ]; then
cmd2
fi;
}
더 많은 옵션이 있다면 케이스 구조를 사용하는 것이 더 좋습니다.
답변2
다음 기능을 추가하면.bashrc
function cd () {
builtin cd "$@" && [[ -f .aliases ]] && . .aliases
return 0
}
.aliases 파일이 포함된 디렉터리로 CD를 이동할 때마다 해당 파일을 받게 됩니다.
다른 사람이 귀하의 컴퓨터에 파일을 생성할 수 있다면 주의하시기 바랍니다.
이 트릭을 사용하면 별칭은 제거되지 않지만 함수 내에 코드를 얼마든지 작성할 수 있습니다.
온딜수많은 추가 기능과 함께 이 트릭을 사용하세요.
답변3
나는 당신이 매우 "디렉토리 지향적"인 것 같은 느낌이 들며, 이 경우 당신의 사고 방식에 더 잘 맞을 것입니다.
(그러나 솔직히 말해서 이것은 완전히 나쁜 생각이라고 생각합니다. 명령이 전역적이기를 원합니다.)
에 .bashrc
넣다 alias go="./.cmd"
(다음에 source ~/.bashrc
).
그런 다음 각 디렉토리에 라는 스크립트를 배치하고 .cmd
원하는 작업을 수행하십시오.chmod +x .cmd
go
답변4
저는 이 작업을 수행하는 방법을 찾는 데 오랜 시간을 보냈고 오늘은 다른 답변 중 일부를 조합했지만 소스에 추가되는 비밀 성분이 있는 솔루션을 생각해냈습니다 direnv
.
.aliases
@teknopaul이 제안한 것처럼 매번 읽을 때의 문제는 정의를 축적하지만 언로드되지 않는다는 것입니다.direnv
로드하여 문제를 해결했습니다.그리고 언로드각 디렉터리의 환경 변수입니다. 그러나 이것은 단지환경 변수, 하지만 함수와 함께 사용할 수 있습니다!
내 별칭은 다음과 같습니다 npm
(물론 별칭은 아니지만 함수입니다).
function npm(){ if [[ -z "$NPMBIN" ]]; then $(which npm) $@; else $NPMBIN $@; fi; }
alias
서브셸에서 논리를 실행하여 위의 내용을 true로 다시 작성할 수도 있지만 따옴표를 이스케이프 처리하는 데 주의해야 합니다!
alias npm='bash -c "if [[ -z \"$NPMBIN\" ]]; then $(which npm) $@; else \"$NPMBIN\" $@; fi;"'