Я пытаюсь использовать команду alias
для переключения между двумя определениями (пытаюсь использовать Rust cargo
и компилятор Crystal crystal
из командной строки). У меня в ~ / .bash_profile
есть следующее:
alias c=crystal alias cargo="unalias c; alias c=cargo" alias crystal="unalias c; alias c=crystal"
Однако, когда я пытаюсь запустить что-то вроде
> c macro.rs
в терминале macOS, я получаю
bash: псевдоним: macro.rs: not found
В чем может быть проблема?
Давайте посмотрим, что здесь происходит:
$ set -x
$ c file
+ unalias c
+ alias c=crystal file
bash: alias: file: not found
$ set +x
Итак, c-файл
расширяется до unalias c; псевдоним c=crystal file
(через промежуточное расширение до crystal file
).
псевдоним c=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"
Или используйте команду
( который ИМХО выглядит лучше):
alias c="command crystal"
alias crystal='alias c="command crystal"'
alias cargo='alias c="command cargo"'
Команда command
также защищает от расширения псевдонимов.