J'utilise Bash comme shell interactif et je me demandais s'il y avait un moyen facile de faire exécuter à Bash une commande système au lieu d'une commande intégrée au shell dans le cas où ils partagent tous les deux le même nom.
Par exemple, utilisez le système kill
(from util-linux
) pour imprimer l'ID de processus (pid) du ou des processus nommés au lieu d'envoyer un signal:
$ /bin/kill -p httpd
2617
...
Sans spécifier le chemin complet de la commande système, la fonction intégrée Bash est utilisée à la place de la commande système. Le programme kill
intégré n'a pas l' -p
option, donc la commande échoue:
$ kill -p httpd
bash: kill: p: invalid signal specification
J'ai essayé les réponses listées dans Make bash use external `time` command plutôt que shell built-in mais la plupart d'entre elles ne fonctionnent que parce qu'il time
s'agit en fait d'un mot clé shell - pas d'un shell intégré .
Outre la désactivation temporaire de la fonction intégrée de Bash enable -n kill
, la meilleure solution que j'ai vue jusqu'à présent consiste à utiliser:
$(which kill) -p httpd
Existe-t-il d'autres moyens plus simples (impliquant moins de frappe) d'exécuter une commande externe au lieu d'un shell intégré?
Notez que ce kill
n'est qu'un exemple et j'aimerais une solution généralisée similaire à la façon dont le préfixe avec le command
code intégré empêche les fonctions qui ont le même nom qu'une commande externe d'être exécutées. Dans la plupart des cas, je préfère généralement utiliser la version intégrée car elle évite de lancer un nouveau processus et, parfois, la fonction intégrée possède des fonctionnalités que la commande externe ne possède pas.
$(…)
- voyez ceci , ceci et ceci .
which kill
fermeture en guillemets (ne peut pas les mettre dans les commentaires) est légèrement plus courte.