별칭 정의 간 전환

별칭 정의 간 전환

나는 명령을 사용하여 두 정의 사이를 전환하려고 합니다( 명령줄에서 aliasRust 및 Crystal 컴파일러를 사용 하려고 합니다). 내 안에는 다음이 있습니다 .cargocrystal~/.bash_profile

   별칭 c=크리스탈
   별칭 상품 = "unalias c; 별칭 c = 상품"
   별칭 크리스탈 = "unalias c; 별칭 c = 크리스탈"

그러나 내가 다음과 같은 것을 실행하려고 할 때

> c 매크로.rs

macOS 터미널에서 나는 얻는다

bash: 별칭: 매크로.rs: 찾을 수 없음

여기서 무엇이 잘못되었을 수 있습니까?

답변1

여기서 무슨 일이 일어나고 있는지 살펴 보겠습니다.

$ set -x
$ c file
+ unalias c
+ alias c=crystal file
bash: alias: file: not found
$ set +x

따라서 는 (중간 확장을 통해 ) c file로 확장됩니다 .unalias c; alias c=crystal filecrystal file

alias c=crystal file무의미한. 내 생각에 당신이 원하는 것은 crystal file처형되는 것 같아요.

의미를 전환하는 별칭의 이름을 바꿀 수도 있습니다 c.

alias usecrystal="alias c=crystal"
alias usecargo="alias c=cargo"

또는 별칭 확장으로부터 명령을 보호할 수 있습니다.

alias c="\crystal"
alias crystal="alias c=\crystal"
alias cargo="alias c=\cargo"

또는 다음을 사용하십시오 command(IMHO가 더 좋아 보입니다).

alias c="command crystal"
alias crystal='alias c="command crystal"'
alias cargo='alias c="command cargo"'

command명령은 별칭 확장도 방지합니다.

관련 정보