То, что вы спрашиваете, не имеет особого смысла.
Ключевое слово означает, что это слово является частью синтаксиса оболочки. Те признаны через токенизацию. Их достаточно, чтобы оболочка перестала распознавать.
Хотя в большинстве оболочек можно использовать псевдонимы для ключевых слов. Таким образом, псевдонимы имеют приоритет над ключевыми словами (в действительности они расширяются рано, и после этого появляется больше токенизаторов, где вы можете иметь больше псевдонимов, ключевых слов) ...
псевдонимы (за исключением псевдонимов zsh, определенных с alias -g
, раскрываются только в командной позиции), поэтому обычно не в builtin the-alias
.
функции имеют приоритет над встроенными, а встроенные над внешними командами (а затем $PATH
решает, какую из них использовать).
Вы можете заставить встроенную функцию с помощью:
builtin the-cmd and its args
(хотя следует отметить, что это не стандартная команда).
Вы можете отключить псевдонимы, заключив их в кавычки (хотя указанная версия также может иметь псевдоним в некоторых оболочках).
Так, например (здесь синтаксис zsh), в:
'while'() echo function while
alias 'while=echo alias while'
Запись на while true
самом деле выдаст alias while true
, и не будет никакого способа использовать while
ключевое слово, так как цитирование его отключит и псевдоним, и ключевое слово.
Вы бы вызвали while
функцию, например:
'whi'le whatever
Если бы была while
встроенная (но, конечно, их не было бы в тех оболочках, у которых есть while
ключевое слово), вы бы написали:
builtin while whatever
И чтобы вызвать while
команду, вы должны написать:
env while whatever
или в zsh
(когда не в sh
эмуляции):
command while whatever
(в других оболочках command
только функции мешают, а не встроенные)
Или
/full/path/to/while whatever
Конечно, ничто не мешает вам делать такие глупые вещи, как:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Что, по крайней мере, в Zsh является действительным (но глупо).
command
подавляет поиск функций, но ни один из них не определяет, какой из оставшихся синонимов будет использоваться. Я ищу способ указать, чтобы выполнить только определенный синоним.builtin
используется, например, в RVM, чтобы переопределитьcd
для хорошего эффекта.Очень полезная идиома для меня это:
Теперь, если я запускаю сценарий с указанным параметром -D, активируется режим разработки, и cd (или любая другая перенесенная команда) выводит отладочную информацию
Это особенно полезно со скриптами, которые запускают ssh. Конечно, я могу переключать set -x, но для меня это более полезно и читаемо.
источник