Seien Sie vorsichtig, dies zu tun.
Wenn Sie hier einen validate
Befehl hinzufügen, wird ein mv
Alias erstellt, der den mv
Befehl zum Verschieben von Dateien anzeigt. Sie können in andere Namenskonflikte geraten. Meine Lösung bietet einen gewissen Schutz, aber es hilft nicht, wenn Sie einen Alias definieren und anschließend eine ausführbare Datei mit demselben Namen hinzufügen $PATH
. Wenn Sie den Befehl bei der Ausführung angeben (z. B. "mv"
), verhindert dies die Aliaserweiterung und führt den tatsächlichen Befehl aus, nicht den Alias.
Auf zur Lösung:
Sie können ihn abschneiden, indem Sie die Befehle übergehen und pro Optionssatz nur einen Alias-Befehl verwenden. Um weitere Alias-Sets schnell hinzuzufügen, können wir die Befehle in eine Funktion einfügen:
gen_aliases() { local cmd="$" local c=$ which -s m$ || alias m$="mvn $cmd" which -s mc$ || alias mc$="mvn clean $cmd" which -s mc$o || alias mc$o="mvn clean $cmd --offline" } for cmd in compile test package install; do gen_aliases "$cmd" done
$
ist eine Parametererweiterung, die word
in den Standardfehler schreibt und die Funktion oder das Skript beendet, wenn sie parameter
nicht festgelegt oder null ist. Verleiht uns einige Überprüfungen, um sicherzustellen, dass wir keine Aliasnamen erstellen, wenn wir keinen Befehl erhalten haben, für den dies getan wird.
$
ist eine Parametererweiterung, die auf length
Zeichen von $parameter
Beginn an erweitert wird offset
, also $
den ersten Buchstaben von $cmd
.
which word
überprüft, ob word
existiert überall in $PATH
. Die -s
Stille es, so bekommen wir nur den Exit - Wert ( 0
falls gefunden, 1
wenn nicht gefunden), die wir dann mit verwenden, ||
die zur Ausführung alias
Befehle nur dann, wenn which
haben nicht finden word
in $PATH
.
Überprüfung der Ergebnisse:
$ type mc mc is aliased to `mvn compile' $ type mcpo mcpo is aliased to `mvn clean package --offline'
Und einen weiteren Satz von Aliasen hinzufügen:
$ gen_aliases validate $ type mv mv is /bin/mv $ type mcv mcv is aliased to `mvn clean validate'