переключение между определениями псевдонимов

Я пытаюсь использовать команду 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

В чем может быть проблема?

0
24.08.2017, 11:18
1 ответ

Давайте посмотрим, что здесь происходит:

$ 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также защищает от расширения псевдонимов.

1
28.01.2020, 04:41

Теги

Похожие вопросы