En muchos casos necesito crear funciones con el mismo nombre que otros programas y no tengo idea de si es una buena forma de utilizar scripts bash.
Ejemplo:
function echo () {
echo -n "$@" ;
}
Después de la prueba, parece que verifica los nombres de las funciones dentro del script antes de las rutas del contenedor. Quiero asegurarme de eso y de cualquier otra información que deba saber.
Respuesta1
echo() {
command echo -n "$@"
}
Usar command
aquí significa solicitar el echo
comando (que está integrado aquí) en lugar de la función que de otro modo tendría prioridad.
Y dado que aquí, echo
también resulta ser una función integrada (no se busca por $PATH
cierto, ya que las funciones integradas tienen prioridad sobre los comandos del sistema de archivos), también puedes hacer:
echo() {
builtin echo -n "$@"
}
Este último enfoque es preferible en zsh
, donde command echo
se ejecutaría /bin/echo
en su lugar (excepto en sh
emulación).
Existen algunas variaciones sutiles entre los shells, pero el orden de precedencia es generalmente:
- elementos incorporados especiales
- funciones
- incorporados
- comandos en
$PATH
(y el orden depende del orden en$PATH
y en lahash
tabla según lo gestiona elhash
integrado)
Teniendo en cuenta que los alias y palabras clave en la sintaxis del shell ( for
, if
...), cuando no están entrecomillados, se consideran antes que aquellos.
El orden de 1
y 2
se invierte en algunos shells como bash
o zsh
. bash
no permite que se definan funciones con el mismo nombre que una función incorporada especial cuando se invoca como sh
.