2 votes

Est-ce que `test` est un buildin ou un programme

Le test est-il un Shell builtin ou un programme réel ?

bruce@Bruce:~$ type -a test
test is a shell builtin
test is /usr/bin/test
bruce@Bruce:~$

bruce@Bruce:~$ file /usr/bin/test
/usr/bin/test: ELF 64-bit LSB executable
bruce@Bruce:~$ 

Mon système fonctionne sous Ubuntu 13.04 et BASH 4.2.45(1)-release.

8voto

hek2mgl Points 753

Il semble que je n'ai pas vraiment répondu à votre question lors de ma première approche. Je vais essayer de l'expliquer davantage...

Bien que le programme test fait partie du paquetage GNU coreutils et sera donc livré avec n'importe quel système GNU/Linux, il est également compilé en tant que buildin dans le module bash dans la plupart des distributions. Je suppose que c'est pour améliorer les performances car il n'est pas nécessaire de lancer un processus enfant pour chaque déclaration conditionnelle. Inutile de dire que le Shell utilisera le builtin en faveur du binaire si les deux sont présents sur le système. Mais vous pouvez appeler :

/usr/bin/test ...

... si vous voulez appeler explicitement le binaire.

Notez également que bash n'est pas le seul Shell sur la plupart des systèmes et d'autres shells peuvent ne pas avoir cette fonctionnalité intégrée (comme dash par exemple). Il existe également des systèmes qui n'ont peut-être même pas bash installé. Pour de telles situations, il existe le binaire de coreutils.


Il est probable qu'il s'agisse d'un programme intégré à votre système. Pour le vérifier, tapez :

help test

Si vous voyez une page d'aide, il s'agit d'une fonction intégrée.

Vous pouvez aussi taper :

type -t test

Cela se voit :

builtin 

sur mon système

1voto

TSG Points 131

test est une commande virtuelle dans bash ou ce que l'on pourrait appeler un builtin . /usr/bin/test existe ainsi qu'une command . En plus des modules intégrés et des commandes, il existe également des functions que l'on peut considérer comme des modules intégrés personnalisés. La priorité sur la façon dont ils sont appelés est : les fonctions d'abord, les builtins ensuite, les binaires externes ou les commandes en dernier ; mais vous pouvez personnaliser cela.

Si vous avez, d'une manière ou d'une autre, créé une fonction qui porte le même nom qu'un buildin, par exemple cd pour ne pas appeler la fonction et appeler la fonction intégrée cd à la place, vous pouvez utiliser la commande intégrée builtin par exemple builtin cd args .

De même, si vous avez un buildin qui a le même nom qu'une commande stockée dans le système de fichiers, par exemple test pour appeler la commande test au lieu de cela, soit vous donnez le chemin explicite, par ex. /usr/bin/test ou utiliser la commande intégrée command par exemple command test -n xyz .

Pour en avoir une idée plus précise, essayez d'exécuter ces commandes :

help
help builtin
help command

1voto

chepner Points 6381

Historiquement, test (et son synonyme [ ) étaient (et restent) des programmes externes. Mais la plupart des shells les fournissent en tant que commandes intégrées pour plus d'efficacité. Il en va de même pour les commandes courantes comme true , false , printf , echo etc.

0voto

Glyph Points 23

En complément des réponses précédentes, on peut utiliser la commande intégrée enable pour activer [ou désactiver] la version intégrée d'une commande donnée cmd (par exemple test ), par enable [-n] cmd . La documentation de enable prend précisément test à titre d'exemple sur mon système.

enable -a montre la liste des commandes intégrées et leur état d'activation.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X