나는 명령을 사용하여 두 정의 사이를 전환하려고 합니다( 명령줄에서 alias
Rust 및 Crystal 컴파일러를 사용 하려고 합니다). 내 안에는 다음이 있습니다 .cargo
crystal
~/.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 file
crystal 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
명령은 별칭 확장도 방지합니다.