Commande bash non bloquante

11

Disons que j'ai un script bash avec ce qui suit:

#!/bin/sh
gedit
rm *.temp

Lorsque je l'exécute à l'aide de sh ./test.sh, geditpop-up mais la rmpartie ne s'exécute qu'après la fermeture gedit.

Je veux que le script continue de s'exécuter même s'il geditn'est pas fermé; comme le geditne bloque pas l'exécution de bash.

L'exemple que j'ai donné n'est qu'un exemple (mettre le rmpremier ne fonctionnera pas dans une situation réelle).

Plante
la source

Réponses:

25

Le terme que vous recherchez est appelé «mise en contexte» d'un emploi. Lorsque vous exécutez une commande dans votre shell ou dans un script, vous pouvez ajouter un indicateur à la fin pour l'envoyer en arrière-plan et continuer à exécuter de nouvelles commandes ou le reste du script. Dans la plupart des coquilles sh, c'est le &personnage.

#!/bin/sh
gedit &
rm ./*.temp

De cette façon, le shell n'attend pas la fin de geditet les deux rmet gedits'exécute simultanément.

Le terme «blocage» concerne généralement les flux d'entrée / sortie, souvent vers des fichiers ou un périphérique. Il est également utilisé dans les langages compilés dans quelque chose de similaire au sens que vous avez utilisé, mais dans les scripts shell bash et similaires, la terminologie (et la fonction!) Est plutôt différente.

Caleb
la source
Merci! qui expliquent pourquoi je n'obtenais que fifo et saisissais les résultats sur google: D
Plante le
Mon impression est que Plante veut influencer un script de l'extérieur, effectuer chaque opération en arrière-plan, pas réécrire le script.
utilisateur inconnu
@user: Il m'a fallu quelques lectures pour deviner ce qu'il voulait. Vous pourriez peut-être commenter la question pour obtenir des éclaircissements.
Caleb
C'est exactement ce dont j'avais besoin, merci encore. fonctionne très bien jusqu'à présent!
Plante