Dans un script shell Bash, l'esperluette "&" est utilisée pour créer des processus :
find -name hello &
Cela entraînera la bifurcation de la commande find et son exécution en arrière-plan (vous pouvez toujours la tuer par son PID).
Pourquoi exécuter une commande shell Linux avec '&' ?
Pour récupérer votre invite immédiatement et exécuter le processus en arrière-plan.
Quelle est leur fonction ?
non hop permet au processus d'arrière-plan de continuer à s'exécuter même après la déconnexion de l'utilisateur (ou la sortie du shell initial).
>& redirige à la fois la sortie standard et l'erreur standard dans le fichier journal.
& exécute le tout en arrière-plan, vous renvoyant immédiatement votre invite.
Explication :
Chaque processus Linux ouvre trois canaux d'E/S, une entrée "stdin", une sortie standard "stdout" et une sortie d'erreur standard "stderr". Ils peuvent être utilisés pour le binaire, mais ils sont traditionnellement du texte. Lorsque la plupart des programmes voient stdin se fermer, ils quittent (cela peut être modifié par le programmeur).
Lorsque le shell parent se ferme, stdin est fermé sur les enfants et (souvent, généralement) les enfants se ferment également. De plus, les enfants reçoivent un signal logiciel, SIGHUP, indiquant que l'utilisateur a "raccroché" (anciennement, le modem) et la valeur par défaut ici est de quitter également. (Remarque, un programmeur peut changer tout cela lors de l'écriture du programme).
Donc, ce que fait nohup, c'est donner au processus enfant un environnement d'E/S séparé, en liant les tenants et les aboutissants à quelque chose qui n'est pas lié au shell parent et en protégeant l'enfant du signal SIGHUP. Une fois l'utilisateur déconnecté, vous verrez le processus d'arrière-plan nohup appartenant à init (processus 1), et non le shell de l'utilisateur.
Cependant nohup
ne peut pas faire le travail complètement si le processus est exécuté au premier plan, donc &
est utilisé pour exécuter le programme en arrière-plan, où il peut continuer à fonctionner avec ou sans utilisateur connecté.
En plus des réponses de Martin, Ash et Kevin, vous verrez parfois une esperluette utilisée mathématiquement pour un ET au niveau du bit :
$ echo $(( 11 & 7 ))
3
Si vous n'êtes pas familier avec les opérateurs de bits :
11: 1011
7: 0111
-------- AND
3: 0011
Dans chaque position, il y a un bit dans le premier nombre ET le deuxième nombre, définissez ce bit sur un dans la réponse.
Pour élaborer sur la réponse d'Ash, lorsqu'il est utilisé dans la redirection, l'esperluette peut dire au shell de copier un descripteur de fichier. Dans cette commande echo "hello" > outputfile 2>&1
l'esperluette fait que toute sortie qui peut aller à l'erreur standard (stderr, descripteur de fichier 2) va au même endroit que la sortie standard (stdout, descripteur de fichier 1, la valeur par défaut pour le côté gauche de >
). Le >& outputfile
l'opérateur est un raccourci pour > outputfile 2>&1
.
Aussi, nouveau dans Bash 4, il y a deux nouveaux terminateurs pour les clauses dans le case
commande ;&
et ;;&
qui affectent si un cas "échoue" et, si c'est le cas, si le test suivant est effectué.