Certaines commandes du shell ne sont pas des programmes mais des commandes internes. Elles sont directement reconnues et exécutées par le shell. Un exemple de commande interne est cd. C'est le répertoire courant du shell qui est modifié par cd, ce qui signifie que le script suivant:
#! /bin/sh cd $*
ne marche pas, car le shell lance un autre shell pour exécuter le script. C'est ce sous-shell qui change son répertoire courant, et ce changement est perdu quand le sous-shell meurt.