web-dev-qa-db-fra.com

Où sont installées les commandes `fg`,` bg` et `jobs`?

fgname__, bget jobssont utilisés pour la gestion des travaux. Et pour une raison quelconque (peut-être que c'est juste moi), je ne parviens pas à trouver l'emplacement de leurs fichiers binaires ni de leurs pages de manuel (whereisn'imprime aucune information). whichne donne aucun résultat. Les commandes elles-mêmes fonctionnent très bien, cependant.

J'ai exécuté des commandes telles que find /bin bg, mais sans résultats. J'ai également lancé find / bg pour lancer un large réseau.

16
Guildenstern

Vous n'obtenez aucun fichier associé à ces commandes car il s'agit de Shell (bashname__), et non de fichiers exécutables séparés (par exemple, fichiers binaires, scripts). En réalité, les fonctions intégrées de Shell sont compilées dans l'exécutable de Shell; si vous le souhaitez, vous pouvez vérifier le code source pour en être sûr. Comme whichou whereisne cherche que des fichiers exécutables externes, vous ne recevez aucune sortie pour les fonctions intégrées.

Pour savoir si une commande est un alias ou une fonction intégrée ou un fichier externe, le meilleur moyen consiste à utiliser l'intégré typename__:

$ type fg
fg is a Shell builtin

$ type bg
bg is a Shell builtin

$ type jobs
jobs is a Shell builtin

Notez également que votre commande findn’est pas syntaxiquement correcte. La syntaxe correcte (la plus simple) est find /where/to/search -name 'name_to_search'.

Notez également que peu de commandes sont implémentées à la fois en tant qu’exécutable autonome et en tant qu’exécutable autonome séparé. Pour de telles commandes, rappelez-vous toujours que la commande intégrée aura la priorité sur la commande externe. Ainsi, lorsque vous exécutez echo something, le echointégré est exécuté. Si vous souhaitez exécuter l'exécutable binaire echoname__, vous devez l'appeler de manière différente. Une solution consiste à utiliser le chemin d'accès complet à l'exécutable: /bin/echo something.

Pour afficher toutes les versions disponibles d'une commande, exécutez typeavec l'option -a:

$ type -a echo
echo is a Shell builtin
echo is /bin/echo

Pour obtenir de la documentation sur les fonctions intégrées de Shell, vous pouvez vérifier la manname__page de bashou utiliser la commande help(qui est une commande intégrée):

help jobs

Aussi, comme l'a souligné @terdon vous devez utiliser typeau lieu de whichname __ .

33
heemayl

Ce sont des fonctions intégrées à Shell: vous pouvez obtenir des informations d'utilisation de base en tapant help fg ou help jobs à l'invite du shell bash ou des informations plus détaillées à partir de la page de manuel bash.

6
steeldriver

En ajoutant à la réponse de heemayl, il convient de souligner que fgname__, bget jobs doivent être intégrés dans le shell, car ils manipulent des structures de données dans le shell. mémoire et/ou l’état du noyau associé au processus du shell. Il ne serait pas possible d'écrire une commande externe faisant ce que fgfait.

D'autres commandes qui doivent être construit en comprennent cdname__, evalname__, execname__, exitname__, exportname__, historyname__, readname__, setname__, source(alias .), shiftname__, trapname__, ulimitname__, umasket waitname__. Votre shell peut avoir une liste plus longue, en fonction du nombre de fonctionnalités étendues implémentées. POSIX a une liste différente, mais qui se chevauche, d'utilitaires intégrés spéciaux " - Je ne sais pas pourquoi des choses comme breaket continuecomptent comme des commandes plutôt que des mots-clés de structure de contrôle, ou pourquoi POSIX ne ne considère pas des choses comme umaskmust-build-in quand elles ne peuvent pas être implémentées autrement. (Vous pouvez écrire un programme appelé /bin/umask appelé umask(2) , mais cela ne modifiera le paramètre que pour lui-même, pas pour les processus ultérieurs créés par le shell, afin qu'il ne remplisse pas ses spécifications.)

5
zwol

fgname__, bget jobsne sont pas des utilitaires distincts, mais ils font partie de bashname __ (commandes intégrées au shell).

vous pouvez trouver plus d'informations à leur sujet dans le manuel bash en utilisant la commande

man bash
2
Registered User

Ce sont des commandes intégrées à Shell. Il n'y a pas de binaire pour eux car ils font partie de Bash (ou du shell que vous utilisez).

Ils sont documentés par exemple dans page de manuel Bash (voir la section "Shell BUILTIN COMMANDS")

2
Florian Diesch