Was Sie fragen, macht nicht wirklich viel Sinn.
Schlüsselwort bedeutet, dass es ein Wort ist, das Teil der Syntax der Shell ist. Diese werden durch Tokenisierung erkannt. Das Zitieren reicht aus, damit die Shell nicht mehr erkennt.
Es ist jedoch in den meisten Shells möglich, ein Schlüsselwort zu aliasen. Aliase haben also Vorrang vor Keywords (in der Tat werden sie frühzeitig erweitert, und danach gibt es mehr Tokenisierung, bei der Sie mehr Aliase und Keywords haben können) ...
Aliase (mit Ausnahme der mit definierten zsh-Aliase alias -g
werden nur in der Befehlsposition erweitert), also normalerweise nicht in builtin the-alias
.
Funktionen haben Vorrang vor integrierten Funktionen und integrierten Funktionen vor externen Befehlen (und $PATH
entscheiden dann , welche verwendet werden sollen).
Sie können das Builtin erzwingen mit:
builtin the-cmd and its args
(obwohl es angemerkt werden sollte, ist es kein Standardbefehl).
Sie können Aliase deaktivieren, indem Sie sie in Anführungszeichen setzen (obwohl die angegebene Version in einigen Shells auch mit Alias versehen sein kann).
So zum Beispiel (hier zsh-Syntax) in:
'while'() echo function while
alias 'while=echo alias while'
Das Schreiben while true
würde tatsächlich ausgegeben alias while true
, und es gäbe keine Möglichkeit, das while
Schlüsselwort zu verwenden, da durch das Zitieren sowohl der Alias als auch das Schlüsselwort deaktiviert würden.
Sie würden die while
Funktion zum Beispiel aufrufen mit:
'whi'le whatever
Wenn es einen while
eingebauten Code geben würde (aber der würde natürlich nicht in den Shells enthalten sein, die ein while
Schlüsselwort enthalten), würden Sie ihn schreiben:
builtin while whatever
Und um den while
Befehl aufzurufen , schreiben Sie:
env while whatever
oder in zsh
(wenn nicht in sh
Emulation):
command while whatever
( command
Verhindert in anderen Shells nur Funktionen, keine eingebauten)
Oder
/full/path/to/while whatever
Natürlich hindert Sie nichts daran, noch albernere Dinge zu tun wie:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Was zumindest in zsh gültig ist (aber doof).
command
die Funktionssuche, aber keines davon gibt an, welches der verbleibenden Synonyme verwendet wird. Ich suche nach einer Möglichkeit, anzugeben, dass nur ein bestimmtes Synonym ausgeführt werden soll.builtin
wird zum Beispiel in RVM verwendet , umcd
für einen schönen Effekt zu übersteuern .Eine äußerst nützliche Redewendung für mich ist:
Wenn ich jetzt das Skript mit -D ausführe, wird der Entwicklungsmodus aktiviert, und die CD (oder ein anderer umschlossener Befehl) gibt die Debug-Informationen wieder
Dies ist besonders nützlich bei Skripten, die ssh ausführen. Klar, ich könnte set -x umschalten, aber das ist für mich nützlicher und lesbarer.
quelle