Je voudrais savoir si les commandes que nous appelons dans le shell sont des fonctions ou des programmes .
Je voudrais savoir si les commandes que nous appelons dans le shell sont des fonctions ou des programmes .
Réponses:
Ça dépend.
Les commandes peuvent appartenir à plusieurs catégories: prédéfinies, alias, fonctions, exécutables (scripts et binaires dans le chemin de recherche).
Sur la ligne de commande, ceux-ci occupent un seul espace de noms plat qui rend possible la substitution. Il existe de nombreuses façons de distinguer les types de programmes:
$ f () { :; }
$ alias a=cat
$ which f
f ()
{
:
}
Nous savons que fc'est une fonction.
$ which a
alias a='cat'
/usr/bin/cat
Nous savons que ac'est un alias.
$ which yes
/usr/bin/yes
Nous savons que yesc'est un programme.
$ builtin echo ; echo $?
0
La coque a un echointégré…
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
… Mais pas pour cat. S'il existe une fonction intégrée ou un alias mais que vous insistez pour appeler le programme à la place, préfixez la commande avec une barre oblique inverse:
$ builtin true | printf "%d\n" $?
0
$ alias true=false
$ true ; printf "%d\n" $?
1
$ \true ; printf "%d\n" $?
0
sh -c 'type true; f() { echo x; }; type f'
typeest préférable à whichpresque tous les usages. Voir unix.stackexchange.com/q/85249/135943
La définition de a functionrenvoie des valeurs uniques et ne génère rien. Les fonctions shell en particulier peuvent très bien et peuvent avoir une sortie ou d'autres effets secondaires, car la valeur de retour des fonctions est si limitée.
A commandest une instruction donnée par un utilisateur pour dire à un ordinateur de faire quelque chose, par exemple, exécuter un seul programme ou un groupe de programmes liés.
A programest une séquence d'instructions (c'est-à-dire des commandes) qui sont données à un ordinateur et compréhensibles par l'unité centrale de traitement (CPU) de l'ordinateur. ces instructions indiquent les opérations que l'ordinateur doit effectuer sur un ensemble de données.
Cela dit, functionssont un sous-ensemble logique du programme. En appeler un est entièrement dans votre processus. C'est commandun programme (ou un shell intégré) qui peut être exécuté à partir du shell de commande. La commande implémente des fonctions qui exécutent une tâche. L'inverse n'est pas correct.
chdir()ou setenv()dans le shell qui est, pour eux, un processus parent distinct.
Je voudrais savoir si les commandes que nous appelons dans le shell sont des fonctions ou des programmes?
Oui.
Plus précisément, lorsque vous tapez du texte et appuyez sur enter, le shell doit déterminer si c'est:
alias,