Problem mit der Interpretation des Alias ​​in Befehlsargumenten


7

Ich habe folgenden Alias:

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

Wenn ich dann einen git mvBefehl mache, wird der wie mvfolgt interpretiert mv -i:

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

Ich möchte, dass der Alias ​​nur angewendet wird, wenn es sich um einen Bash-Befehl handelt

Versionen:

  • Ubuntu 16.04.3 LTS
  • GNU Bash, Version 4.3.48 (1)
  • Git Version 2.7.4 (auch ich glaube nicht, dass es mit Git verbunden ist)

Anmerkungen:

  • git \mv a b funktioniert
  • Unaliasing Git funktioniert auch \git mv a b

2
Ich kann dies mit Git 2.12.4 und Bash 4.4.12 nicht wirklich reproduzieren.
— Kusalananda

4
In bash Version 4.4 funktionieren Aliase nur, wenn der Alias ​​das erste Wort in einer Zeile ist. Demo: alias woo="woo hoo" ; echo wooAusgänge woo.
— Agc

Ich würde diesen Alias mvioder ähnliches nennen.
— Pfnuesel

Bist du sicher? Eine Problemumgehung könnte darin bestehen, mveine Bash- Funktion (keinen Alias) zu erstellen .
— Basile Starynkevitch

1
Ich habe hier die gleichen Versionen installiert und kann das auch nicht reproduzieren. Muss mit Ihrer Bash-Konfiguration etwas Besonderes sein; Sie können die Aliase und die Umgebung auf etwas Ähnliches überprüfen git. Was bekommst du beim Versuch type -a mvund type -a git?
— Murphy

Antworten:


15

Da gitein Alias mit einem Leerzeichen endet , führt bash eine Alias-Erweiterung für das Wort unmittelbar danach durch:

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

Aus den Dokumenten :

Wenn das letzte Zeichen des Aliaswerts leer ist, wird das nächste Befehlswort nach dem Alias ​​ebenfalls auf Aliaserweiterung überprüft.

Erstellen Sie giteinen Alias ​​ohne Leerzeichen:

alias git='LANG=en_US git'

Beachten Sie, dass:

Das erste Wort des Ersatztextes wird auf Aliase getestet, aber ein Wort, das mit einem zu erweiternden Alias ​​identisch ist, wird nicht ein zweites Mal erweitert. Dies bedeutet , dass man kann alias lszu ls -F, zum Beispiel, und Bash versucht nicht rekursiv den Ersatztext zu erweitern.

Also brauchst du da nicht \git.


Sie haben Recht, das Entfernen dieses zusätzlichen Platzes hat den Job gemacht, danke!
— jo_
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.