J'ai défini une fonction shell (appelons-la clock
), que je veux utiliser comme wrapper pour une autre commande, similaire à la time
fonction, par exemple clock ls -R
.
Ma fonction shell effectue certaines tâches, puis se termine par exec "$@"
.
Je voudrais que cette fonction fonctionne même avec les commandes internes du shell, par exemple clock time ls -R
devrait produire le résultat de la commande time
intégrée, et non l' /usr/bin/time
exécutable. Mais exec
finit toujours par exécuter la commande à la place.
Comment puis-je faire en sorte que ma fonction Bash fonctionne comme un wrapper qui accepte également les arguments intégrés au shell comme arguments?
Edit : je viens d'apprendre que ce time
n'est pas un Bash intégré, mais un mot réservé spécial lié aux pipelines. Je suis toujours intéressé par une solution pour les intégrés même si cela ne fonctionne pas time
, mais une solution plus générale serait encore meilleure.
exec bash -c \' "$@" \'
. À moins que votre commande dans le premier paramètre ne soit reconnue comme un script shell, elle sera interprétée comme un binaire à exécuter directement. Alternativement, et plus simplement, il vous suffit de rater leexec
et d'appeler"@"
depuis votre shell d'origine.