• [^] # Re: Pour être sur

    Posté par (site web personnel, Mastodon) . En réponse au journal Gufo: un langage de shell moderne!. Évalué à 2.

    J'imagine que la commande externe est là pour des raisons de compatibilité avec les shell utilisant print. Quelqu'un, j'ai bon?

    Je dirais que ça s'est plutôt passé dans l'autre sens. En principe, toutes les commandes devraient être externes. Mais ce n'est pas possible pour celles qui modifient l'état interne du shell: set, cd, ...

    Du coup, ces commandes sont implémentées sous forme de commandes internes (qui peuvent donc accéder et modifier l'état interne du shell: variables, répertoire courant, ...).

    Cependant, exécuter une commande externe, c'est lent: il faut faire un fork puis un exec, la commande doit ensuite parser ses arguments, faire son travail, puis se terminer, et enfin le shell peut reprendre la main sur stdin et stdout.

    Du coup, certains shells comme bash se sont permis d'implémenter certaines commandes directement en interne pour qu'elles soient plus rapides. En créant au passage des incompatibilités parce que l'une ou l'autre version n'accepte pas forcément exactement les mêmes arguments...