To, o co pytasz, nie ma większego sensu.
Słowo kluczowe oznacza, że jest to słowo, które jest częścią składni powłoki. Są one rozpoznawane przez tokenizację. Przywołanie ich wystarczy, aby powłoka przestała rozpoznawać.
Możliwe jest jednak aliasowanie słowa kluczowego w większości powłok. Tak więc aliasy mają pierwszeństwo przed słowami kluczowymi (w efekcie są wcześnie rozwijane, a po nich jest więcej tokenizacji, w której można mieć więcej aliasów, słów kluczowych) ...
aliasy (z wyjątkiem aliasów zsh zdefiniowanych za pomocą alias -g
są rozwijane tylko w pozycji polecenia), więc zazwyczaj nie w builtin the-alias
.
funkcje mają pierwszeństwo przed wbudowanymi, a wbudowane przed zewnętrznymi poleceniami (a następnie $PATH
decydują, którego z nich użyć).
Możesz wymusić wbudowane za pomocą:
builtin the-cmd and its args
(choć należy zauważyć, że nie jest to standardowe polecenie).
Możesz wyłączyć aliasy poprzez ich cytowanie (choć cytowana wersja może być również aliasowana w niektórych powłokach).
Na przykład (tutaj składnia zsh) w:
'while'() echo function while
alias 'while=echo alias while'
Pisanie while true
faktycznie wyszedłoby na jaw alias while true
i nie byłoby możliwości użycia while
słowa kluczowego, ponieważ cytowanie go wyłączyłoby zarówno alias, jak i słowo kluczowe.
Wywołalibyśmy tę while
funkcję na przykład:
'whi'le whatever
Jeśli while
byłby wbudowany (ale oczywiście nie byłby w tych powłokach, które mają while
słowo kluczowe), napisałbyś to:
builtin while whatever
Aby wywołać while
polecenie, napiszesz:
env while whatever
lub w zsh
(gdy nie ma sh
emulacji):
command while whatever
(w innych powłokach command
zapobiega tylko funkcjom, nie wbudowanym)
Lub
/full/path/to/while whatever
Oczywiście nic nie powstrzymuje cię przed robieniem jeszcze głupszych rzeczy, takich jak:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Które przynajmniej w zsh jest poprawne (ale głupie).
command
pomija wyszukiwanie funkcji, ale żaden z nich nie określa, który z pozostałych synonimów zostanie użyty. Szukam sposobu, aby określić, aby wykonać tylko określony synonim.builtin
jest używany na przykład w RVM do zastąpienia wcd
celu uzyskania miłego efektu.Niezwykle przydatnym dla mnie idiomem jest to:
Teraz, jeśli uruchomię skrypt z podaną opcją -D, tryb programowania zostanie aktywowany, a cd (lub dowolne inne zawinięte polecenie) wyświetli informacje o debugowaniu
Jest to szczególnie przydatne w skryptach uruchamiających ssh. Pewnie, że mógłbym przełączyć set -x, ale dla mnie jest to bardziej przydatne i czytelne.
źródło