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 -gsolo 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 $PATHdecide 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 truerealmente generaría resultados alias while true, y no habría forma de usar la whilepalabra clave, ya que si se cita deshabilitaría tanto el alias como la palabra clave.
Llamaría a la whilefunción con, por ejemplo:
'whi'le whatever
Si hubiera un whileincorporado (pero, por supuesto, no lo haría en esos shells que tienen una whilepalabra clave), lo escribiría:
builtin while whatever
Y para llamar al whilecomando, escribirías:
env while whatever
o en zsh(cuando no está en shemulación):
command while whatever
(en otros shells, commandsolo 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).
commandsuprimen 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 .builtinse utiliza, por ejemplo, en RVM para anularcdun 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