![기존 별칭에서 별칭 만들기](https://linux55.com/image/185966/%EA%B8%B0%EC%A1%B4%20%EB%B3%84%EC%B9%AD%EC%97%90%EC%84%9C%20%EB%B3%84%EC%B9%AD%20%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
두 개의 별도 파일이 있는데 둘 다 my 에서 시작되었으며 .zshrc
그 중 하나(첫 번째 파일)가 이 별칭을 정의합니다.
alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
문제는 이 다음의 다른 것도 wget
별칭을 정의한다는 것입니다.
alias wget='wget -c'
어떻게든 두 번째 별칭이 이전 별칭을 사용하여 자체적으로 정의되도록 해야 합니다. 나는 비슷한 것을 사용하려고 생각하고 있었지만 $(wget)
그것은 단지 재귀 루프에 빠지게 만들었습니다. 새 별칭을 정의할 때 동일한 이름을 가진 기존 별칭을 참조할 수 있는 좋은 방법이 있습니까?
어떻게든 첫 번째 별칭의 내용을 가져온 다음 새 플래그와 연결하여 명령 앞에 별칭이 아직 없는 경우 이전 별칭을 기반으로 구축할 생각을 할 수도 있습니다.
참고: 별칭 중 하나의 이름을 변경하고 다음 별칭에서 참조할 수 있다는 것을 알고 있지만 그것은 내가 원하는 것이 아닙니다. 또한 단순히 수동으로 1개의 별칭으로 정의하고 싶지 않습니다. 새 별칭을 정의할 때 이전 별칭 정의를 자동으로 사용하여 서로 연결할 수 있는 방법을 원합니다.
이런 것을 어떻게 구현할 수 있는지 아시나요? 아니면 이와 같은 작업을 수행하는 더 좋은 방법이 있을까요?
답변1
당신은 그것을 사용할 수 있습니다aliases
해시 테이블이를 위해:
% zmodload -F zsh/parameter p:aliases
% alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
% alias wget="$aliases[wget] -c"
% alias
wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts" -c'
이전에 명령에 별칭이 지정되지 않은 경우 실제 명령으로 돌아가기 위해 일부 처리를 수행해야 할 수도 있습니다.
이는 을 사용하여 달성할 수 있습니다 ${aliases[wget]:-wget}
. 그런 다음 비어 있으면 $aliases[wget]
리터럴 값이 사용됩니다.wget
답변2
이는 alias
출력을 보기 흉하게 구문 분석하여 수행할 수 있습니다.
$ alias foo='foo --first'
$ alias foo=$(alias foo | cut --delimiter== --fields=2 | head --bytes=-2 | tail --bytes=+2)' --second'
$ alias foo
alias foo='foo --first --second'
물론 alias
별칭을 다른 형식(여러 줄 또는 다른 따옴표)으로 인쇄하면 모든 베팅이 취소됩니다. 또한 별칭이 아직 설정되지 않은 경우도 처리하지 않습니다.
$ unalias foo
$ alias foo=$(alias foo | cut --delimiter== --fields=2 | head --bytes=-2 | tail --bytes=+2)' --second'
bash: alias: foo: not found
$ alias foo
alias foo=' --second'