alterna entre definições de alias

0

Estou tentando usar o comando alias para alternar entre duas definições (tentando usar o cargo do Rust eo compilador crystal do Crystal na linha de comando). Eu tenho o seguinte no meu ~/.bash_profile :

   alias c=crystal
   alias cargo="unalias c; alias c=cargo"
   alias crystal="unalias c; alias c=crystal"

No entanto, quando tento executar algo como

> c macro.rs

no terminal macOS eu recebo

bash: alias: macro.rs: not found

Qual pode ser o problema aqui?

    
por Sum Proxy 24.08.2017 / 10:18

1 resposta

0

Vamos ver o que está acontecendo aqui:

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

Portanto, c file é expandido para unalias c; alias c=crystal file (por meio de uma expansão intermediária para crystal file ).

alias c=crystal file não faz sentido. O que eu acho que você pode querer é que crystal file seja executado.

Você pode renomear os aliases que alteram os significados de c :

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

Como alternativa, você pode proteger o comando da expansão de alias:

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

Ou use command (que parece melhor para IMHO):

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

O comando command também protege da expansão do alias.

    
por 24.08.2017 / 10:33