Funktionierender Shell-Befehl führt keinen Alias ​​aus

Funktionierender Shell-Befehl führt keinen Alias ​​aus

Ich kann rennen,

 svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/!d' |xargs ls -altr --color=auto

alles in Ordnung. Aber wenn ich dies als Alias ​​hinzufügen möchte (alias svtr="...") erhalte ich die Fehlermeldung...

-bash: !d': event not found

Irgendwelche Ideen?

Antwort1

Die Verwendung eines Backslashs \zum Escapen !sollte funktionieren.

alias svtr="svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/\!d' |xargs ls -altr --color=auto"
alias svtr
alias svtr='svn status |grep -v .jasper$ |cut -d '\'' '\'' -f8 |sed '\''/.*\..*/\!d'\'' |xargs ls -altr --color=auto'

Eigentlich wird dadurch nur der Fehler behoben, da ""die Shell innerhalb von versucht, zu interpretieren !.

Möglicherweise möchten Sie die Anführungszeichen rückgängig machen (d. h. einfache Anführungszeichen zum Definieren des Alias ​​verwenden, doppelte Anführungszeichen innerhalb des Alias-Befehls verwenden und einfache Anführungszeichen nach Bedarf maskieren).

Antwort2

Das !din Ihrem sedBefehl verursacht dies, da es !sich um das Bash-History-Erweiterungszeichen handelt. Deaktivieren Sie die History-Erweiterung vorübergehend wie folgt:

set -H
alias svtr="..."
set +H

Das sollte es tun.

verwandte Informationen