problem with alias being interpreted in command arguments
I have the following alias:
alias mv='mv -i'
alias git='LANG=en_US git '
then when I do a git mv
command the mv
is interpreted as mv -i
:
$ git mv a b
error: unknown switch `i'
I would like the alias to apply only if it is a bash command
Versions:
- Ubuntu 16.04.3 LTS
- GNU bash, version 4.3.48(1)
- git version 2.7.4 (also I don’t think it’s linked to git)
Notes:
git mv a b
works- unaliasing git also works
git mv a b
Since git
is an alias ending with a space, bash performs alias expansion on the word immediately after it:
$ alias mv='mv -i'
$ alias git=': git '
$ set -x
$ git mv
+ : git mv -i
From the docs:
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.
Make git
an alias without the space:
alias git='LANG=en_US git'
Note that:
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 aliasls
tols -F
, for
instance, and Bash does not try to recursively expand the replacement
text.
So, you don’t need git
there.