problema com alias sendo interpretado em argumentos de comando

6

Eu tenho o seguinte apelido:

alias mv='mv -i'
alias git='LANG=en_US \git '

quando eu faço o comando git mv , o mv é interpretado como mv -i :

$ git mv a b
error: unknown switch 'i'

Eu gostaria que o alias se aplicasse somente se fosse um comando bash

Versões:

  • Ubuntu 16.04.3 LTS
  • GNU bash, versão 4.3.48 (1)
  • git versão 2.7.4 (também não acho que esteja ligado ao git)

Notas:

  • git \mv a b funciona
  • O git
  • unaliasing também funciona em \git mv a b
por jo_ 31.08.2017 / 09:46

1 resposta

14

Como git é um alias terminando com um espaço , o bash executa expansão de alias na palavra imediatamente após:

$ alias mv='mv -i'
$ alias git=': git '
$ set -x
$ git mv
+ : git mv -i

Em os documentos :

If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.

Crie git um alias sem o espaço:

alias git='LANG=en_US git'

Observe que:

The first word of the replacement text is tested for aliases, but a word that is identical to an alias being expanded is not expanded a second time. This means that one may alias ls to ls -F, for instance, and Bash does not try to recursively expand the replacement text.

Então, você não precisa de \git .

    
por 31.08.2017 / 10:51

Tags