Que fait $ (commande) & que fait-il?


10

J'ai vu la syntaxe suivante dans un script bash:

 >$(command) &

Je sais que l'esperluette &à la fin fait exécuter une commande en arrière-plan, mais je ne l'ai jamais vue en combinaison avec le signe dollar plus les crochets autour de la commande.

Qu'est ce que ça fait?


Je connais ce genre d'utilisation $( ), mais il n'y a pas de repos. C'est juste $(command) &, c'est ce qui me déroute.
AlphaOmega

Réponses:


20

Réponse courte

Compte tenu de la syntaxe $(command) &, le résultat est le même que si vous avez pris la sortie en cours d' exécution juste commandet essayé de courir que comme une commande. Et tout cela se ferait en arrière-plan, ce qui signifie qu'il n'y aurait pas de sortie visible ou de suspension dans le terminal.

Par exemple, si nous avions un fichier texte nommé mycommand.txtavec le contenu:

echo "Hello World"

Ensuite, la commande

$(cat mycommand.txt) &

serait équivalent à courir

echo "Hello World" &

Mais depuis que nous avons ajouté l'esperluette ( &), nous ne verrions aucune sortie de cette commande, donc ce serait assez inutile dans cet exemple.


Réponse longue (explication)

Signe dollar $(variable)

Le signe dollar devant la chose entre parenthèses se réfère généralement à une variable. Cela signifie que cette commande transmet un argument à cette variable à partir d'un script bash ou obtient la valeur de cette variable pour quelque chose. La différence dans les scripts bash pour appeler et déclarer des variables est la suivante:

Déclarez une variable sans le signe dollar et appelez-la avec un signe dollar. Par exemple, un script qui contient ce

#!/bin/bash
STR="Hello World!"
echo $STR

Sortirait cela

Hello World!

Parenthèse ()- Substitution de commande

La substitution de commande permet à la sortie d'une commande de remplacer la commande elle-même. La substitution de commande se produit lorsqu'une commande est incluse comme suit:

$(command)

ou

`command`

Bash effectue l'expansion en exécutant la commande dans un environnement de sous-shell et en remplaçant la substitution de commande par la sortie standard de la commande, avec tous les retours à la ligne supprimés. Les sauts de ligne incorporés ne sont pas supprimés, mais ils peuvent être supprimés lors du fractionnement des mots. La substitution de commande $(cat file)peut être remplacée par l'équivalent mais plus rapidement $(< file).

Esperluette &- Processus d'arrière-plan

Et puis l'esperluette, ou &symbole, est, comme vous l'avez dit, utilisé pour l'exécuter en arrière-plan.


2

il prend la sortie de "command" comme une commande et l'exécute en arrière-plan. Son fonctionnement est comparable à "eval"


Il s'agit d'un symbole présent dans la fenêtre du terminal qui, selon ce que vous essayez de faire, peut ne pas être nécessaire pour entrer par vous. Lorsque vous ouvrez un terminal, vous le voyez immédiatement.
monkeyman_stones

Je ne comprends pas. Bien que courte, cela répond à la question réelle alors que la réponse acceptée ne le fait pas.
mveroone
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.