Lo que preguntas realmente no tiene mucho sentido.
palabra clave significa que es una palabra que forma parte de la sintaxis del shell. Esos se reconocen a través de la tokenización. Citarlos es suficiente para que el shell deje de reconocer.
Sin embargo, es posible alias una palabra clave en la mayoría de los shells. Por lo tanto, los alias tienen precedencia sobre las palabras clave (en efecto, se expanden temprano, y luego hay más tokenización donde puede tener más alias, palabras clave) ...
alias (con la excepción de los alias zsh definidos con alias -g
solo se expanden en la posición del comando), por lo que normalmente no están en builtin the-alias
.
las funciones tienen precedencia sobre las incorporadas, y las incorporadas sobre los comandos externos (y luego $PATH
decide cuál usar).
Puede forzar la construcción con:
builtin the-cmd and its args
(aunque debe tenerse en cuenta que no es un comando estándar).
Puede deshabilitar los alias entre comillas (aunque la versión citada también podría tener alias en algunos shells).
Entonces, por ejemplo (aquí sintaxis zsh), en:
'while'() echo function while
alias 'while=echo alias while'
La escritura while true
realmente generaría resultados alias while true
, y no habría forma de usar la while
palabra clave, ya que si se cita deshabilitaría tanto el alias como la palabra clave.
Llamaría a la while
función con, por ejemplo:
'whi'le whatever
Si hubiera un while
incorporado (pero, por supuesto, no lo haría en esos shells que tienen una while
palabra clave), lo escribiría:
builtin while whatever
Y para llamar al while
comando, escribirías:
env while whatever
o en zsh
(cuando no está en sh
emulación):
command while whatever
(en otros shells, command
solo previene funciones, no incorporadas)
O
/full/path/to/while whatever
Por supuesto, nada te impide hacer cosas aún más tontas como:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Lo cual, al menos en zsh es válido (pero estúpido).
command
suprimen la búsqueda de funciones, pero ninguna de ellas especifica cuál de los sinónimos restantes se utilizará. Estoy buscando una manera de especificar para ejecutar solo un sinónimo específico .builtin
se utiliza, por ejemplo, en RVM para anularcd
un efecto agradable.Un modismo extremadamente útil para mí es este:
Ahora, si ejecuto el script con -D especificado, el modo de desarrollo se activa y el cd (o cualquier otro comando envuelto) repite la información de depuración
Esto es especialmente útil con scripts que ejecutan ssh. Claro que podría alternar set -x, pero esto es más útil y legible para mí.
fuente