Skippy le Grand Gourou a écritJe pige pas tout là... Ton problème initial était que tu n'arrivais pas à arrêter la boucle, non ? Dans ce cas je viens de tester, et ma réponse fonctionne parfaitement, même si en fait la moitié est inutile, il suffit de :
trap 'break' SIGINT
(le 2 est le numéro du signal de sortie SIGINT, ou Ctrl+C, la commande trap sert à le récupérer pour le remplacer ici par un "break", qui sert à quitter une boucle ; mon erreur (enfin pas vraiment, parce que ça fonctionne) était de vouloir inclure également une autre commande trap, pour rétablir le Ctrl+C, mais ça se fait automatiquement en sortant de l'exécution du script).
Maintenant si je comprends bien tu parles d'empêcher l'exécution du script s'il est déjà lancé, ou de tuer la première instance si on en lance une deuxième ? Dans les deux cas c'est un autre problème...
Pardon je me suis mal exprimé, désolé. Il ne s'agissait pas de sortir de la boucle, l'interruption par le signal SIGINT marche. Je parlais effectivement d'arrêter le script lorsqu'un autre instance de ce même script était déjà lancée. C'est d'ailleurs ce à quoi sert ce code dans les autres scripts :
if [ ! -z $(ps -A | grep mbrola | awk '{ print $1 }' ) ]; then
kill $(ps -A | grep mbrola | awk '{ print $1 }' )
Mais ici cela ne marche plus depuis que la boucle for a été introduite, puisque successivement de nouvelles executions de Mbrola sont lancées à chaque itération.
Pour pallier à ce problème, il faut donc arrêter les scripts en cours d'execution, j'ai alors remplacé mbrola dans le code précédent par le nom du script (grep "nom_du_script" au lieu de grep mbrola), mais cela ne fonctionne pas.
J'ai aussi pensé à pkill "nom_du_script" mais ça me parait un petit peu bourrin....
Skippy le Grand Gourou a écritPas compris la suite non plus...
Lorsque j'execute le script permettant de lire le contenu d'un dossier à l'aide du menu scripts de Nautilus, ça me lit tous les fichiers. Donc pas de problèmes.
Lorsque je sélectionne des fichiers à l'aide de la souris, ça me lit le 1er fichier et puis...ça s'arrête. D'autres fois...ça marche il me lis bien les bon fichiers et rien de plus, d'autre fois encore il m'en lit seulement 3...
Mais 90% des fois il s'arrête au 1er. Et lorsque je regarde les logs (fichier file), j'ai bien tous les fichiers sélectionnés et rien de plus.
Alors j'essaie d'éxécuter ce fichier en console et là un coup ça marche un autre coup ça marche plus il me renvoie l'erreur que j'ai donnée dans mon précédent post (sans rien lire du tout) :
$ sh dossier dossier fichier
Lecture en cours Sparc Audio 'stdin' : Signed 16 bit Big Endian, Taux 22050 Hz, Mono
Lecture en cours Sparc Audio 'stdin' : Signed 16 bit Big Endian, Taux 22050 Hz, Mono
#il lit bien les 2 fichiers donnés en paramètres
#dans la foulée je le relance :
$ sh dossier dossier fichier
ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave
aplay: main:545: Erreur d'ouverture audio: Périphérique ou ressource occupé
ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave
aplay: main:545: Erreur d'ouverture audio: Périphérique ou ressource occupé
Donc je pensais que peut être c'était à cause de cette erreur que le script s'arrêtait lorsque je sélectionnait les fichiers à la souris, mais à vrai dire j'en sais rien du tout....
A priori, la boucle for avec le : `ls $@` est correcte puisque dans file il y a bien les bon fichiers.
Voilà j'espère avoir été plus clair, désolé si j'ai été confus dans mes précédents posts.