Que fait la commande intégrée dans bash?

35

Je sais ce qu'est une commande intégrée, mais que fait- builtinelle? L'exécution which lsme montre /bin/ls, mais l'exécution which builtinne renvoie rien.

man builtinme donne juste une liste de commandes intégrées, dont l’une est builtin. Le reste de la page de manuel explique ce qu'est un élément intégré, mais pas ce qu'il builtinest.

builtin --helpme dit builtin: usage: builtin [shell-builtin [arg ...]]mais toujours pas ce qu'il fait.

Cela fait-il partie de bash d'une manière que les autres commandes intégrées ne font pas?

Alfine
la source
3
Vous avez oublié help builtin.
Ignacio Vazquez-Abrams
3
which builtinne renvoie aucun résultat, car whichindique l'emplacement des commandes externes . Si vous demandez à la coquille type builtin, elle vous le dira, sans surprise builtin is a shell builtin. Vous trouverez la même chose avec alias, setetc.
Toby Speight
1
builtin help builtin
theonlygusti

Réponses:

50

La builtincommande s'assure que vous exécutez la version intégrée de la commande dans le shell plutôt que d'exécuter une autre commande portant le même nom.

Par exemple, supposons que vous ayez défini une fonction shell nommée cdpour imprimer un statut supplémentaire chaque fois que vous changez de répertoire. Mais vous avez tout gâché et vous ne pouvez plus modifier correctement les répertoires. Alors maintenant, vous pouvez taper builtin cd ~avec succès cd dans votre répertoire personnel sans exécuter votre fonction shell cassée.

En passant, ma copie de la page de manuel bash contient une section intitulée "SHELL BUILTIN COMMANDS", qui définit le sens de la builtincommande dans cette section (transcrit ci-dessous).

construit dans le shell intégré [arguments]

    Exécuter le shell spécifié, en lui passant des arguments, et
    renvoyer son statut de sortie. Ceci est utile lors de la définition d'une fonction
    dont le nom est identique à celui d’un shell intégré, en conservant le
    fonctionnalité de la fonction intégrée. Le cd intégré est
    communément redéfini de cette façon.

    Le statut de retour est false si le shell intégré n'est pas un shell intégré
    commander.
Spiff
la source
14
Bonne réponse. Mais, je me demande bien, comment pouvez-vous être sûr que la builtincommande est le véritable construit de bash?
Pacopaco
14
@Pacopaco: Vous ne pouvez pas :-). Vous pouvez remplacer builtinaussi: function builtin { echo "Hi from builtin :-)"; }. Alors builtinne fonctionne plus.
Sleske
12
@Pacopaco, type builtinvous dira si c'est le réel builtin. - Sauf si typea été remplacé par un non type...
Toby Speight
10
oh ... malheureusement, on peut: alias unset = "echo unset est remplacé"; alias alias = "écho alias est remplacé" ... Donc, pas de chance ici.
Olivier Dulac
8
J'adore cette discussion en cours!
Sam Weaver