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).

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.


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
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.