Sous UNIX, comme Bash et Korn exec
est utilisé pour deux utilisations spécifiques.
Son utilisation pour remplacer le programme actuel par un autre, comme dans exec prog
est compréhensible. Le nom exec
est une contraction de la famille de routines C basée sur execve
.
Si j'écrivais un shell et que je voulais une commande pour ouvrir un fichier, je l'appellerais probablement open
, mais non, les obus Bash et Korn utilisent exec
encore une fois, comme dans exec 3<file
, par exemple.
Pourquoi le exec
commande réutilisée pour quelque chose de complètement différent?
Je suis 4 ans en retard à la fête, mais je viens de regarder moi-même.
Notez simplement que vous devez être prudent avec la réponse de Glenn, car dans le cas où vous utilisez exec avec à la fois une commande et une redirection, le résultat est simplement la redirection.
La commande supposée 'exec'd' sera exécutée dans un sous-shell, et les commandes suivantes dans le script appelant seront toujours exécutées.
Ce qui pour moi suggère que les deux utilisations devraient vraiment être deux commandes distinctes.
la source
exec date > date.out
dans un script, et les commandes après dans le script didnotrun. (2) Ce n'est pas vraiment une réponse à la question.builtins/exec.def
) Remplacez le shell avec la commande donnée. Exécutez COMMAND en remplaçant ce shell par le programme spécifié. Les arguments deviennent les arguments de COMMAND. Si COMMAND n'est pas spécifié, les redirections prennent effet dans le shell actuel.exec date | tee date.out
et qui se comporte différemment. Si vous exécutez un script qui affiche $$ de cette façon, vous verrez que vous obtenez un nouveau shell. Donc, il semble qu'une pipe fonctionne différemment. Je cherchais un peu la même chose, mais je suppose qu'un tuyau inclut une redirection, mais représente plus qu'une simple redirection.