¿Qué hace el comando incorporado en bash?

35

Sé lo que es un comando incorporado, pero ¿qué hace en builtinsí mismo? Ejecutar which lsme muestra /bin/ls, pero ejecutar which builtinno devuelve nada.

man builtinsolo me da una lista de comandos incorporados, uno de los cuales es builtin. El resto de la página del manual explica qué es un builtin incorporado, pero no qué builtines.

builtin --helpme dice builtin: usage: builtin [shell-builtin [arg ...]]pero aún no lo que hace.

¿Es parte de bash de una manera que otros comandos incorporados no lo son?

lfalin
fuente
3
Se le olvidó help builtin.
Ignacio Vazquez-Abrams
3
which builtinno devuelve resultados porque whichinforma la ubicación de los comandos externos . Si le preguntas a la concha type builtin, te dirá, como era de esperar, que builtin is a shell builtin. Encontrarás lo mismo con alias, setetc.
Toby Speight
1
builtin help builtin
theonlygusti

Respuestas:

50

El builtincomando se asegura de que ejecute la versión integrada del shell del comando en lugar de ejecutar otro comando con el mismo nombre.

Por ejemplo, supongamos que definió una función de shell llamada cdpara imprimir un estado adicional cada vez que cambia de directorio. Pero lo arruinaste y ahora no puedes cambiar los directorios correctamente. Por lo tanto, ahora puede escribir builtin cd ~con éxito el CD de nuevo a su directorio de inicio sin ejecutar su función de shell roto.

Y, por cierto, mi copia de la página de manual de bash tiene una sección llamada "COMANDOS SHELL BUILTIN", y define el significado del builtincomando en esa sección (transcrita a continuación).

builtin shell-builtin [argumentos]

    Ejecute el shell incorporado especificado, pasándole argumentos y
    devolver su estado de salida. Esto es útil al definir una función
    cuyo nombre es el mismo que una concha incorporada, conservando el
    funcionalidad del incorporado dentro de la función. El CD incorporado es
    comúnmente redefinido de esta manera.

    El estado de retorno es falso si shell-builtin no es un shell builtin
    mando.
Spiff
fuente
14
buena respuesta. Pero me pregunto, ¿cómo puedes estar seguro de que el builtincomando es el verdadero incorporado de bash?
Pacopaco
14
@Pacopaco: No puedes :-). Usted puede anular builtin, también: function builtin { echo "Hi from builtin :-)"; }. Entonces builtinya no funciona.
sleske
12
@Pacopaco, type builtinte dirá si es real builtin. A menos que typehaya sido reemplazado por un no incorporado type...
Toby Speight
10
oh ... desafortunadamente uno puede: alias unset = "echo unset is anulado"; alias alias = "echo alias is overridide" ... Entonces no hay suerte aquí.
Olivier Dulac
8
¡Me encanta esta discusión en curso!
Sam Weaver