logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 23-01-2022 11:59:49

Anonyme
Invité

[Résolu] Interrompre une commande dans une boucle (pour Script)

Bonjour,

J'ai ce bout de script que je dois caser dans mon script final ( à venir )


#!/bin/bash

DEVICE=$( setcd -i /dev/sr* |  grep -B1 "audio disc" | head -1 | sed -e 's/://g')
echo -n "Entrer Le Numéro du Titre (ou plusieurs ex: 10 3 13) :"
read -r num
echo "$num"  

for n in $num; do    
mplayer -ao alsa -noconfig all -nolirc -cdrom-device "$DEVICE" cdda://"$n" -cache 8000 -cache-min 80;

done
 



Sur un visuel, non présent ici, je sélectionne les pistes d'un cd audio pour écoute.
L'ordre d'écoute est bien respecté.
Par un action ctrl + c, ça passe au suivant mais j'aimerai un moyen (touche ou autre) pour pouvoir interrompre tout ça. Je ne trouve pas.

Vous avez une astuce ?

Dernière modification par Anonyme (24-01-2022 17:06:29)

#2 23-01-2022 12:48:29

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Je vais tester break sur ma commande ....

#3 23-01-2022 12:51:57

nlancien
Membre
Distrib. : Debian Stable
Noyau : Linux 4.19.0-12-amd64
(G)UI : Openbox
Inscription : 17-07-2019

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Si tu as le pid, un kill
Ou direct un killall dessus?

killall mplayer



EDIT Plutot kill le script, si tu kill juste mplayer la boucle va le faire redemarer. Ou alors avec un while pour killer successivement tout ce que la boucle va creer

Dernière modification par nlancien (23-01-2022 13:05:47)

Hors ligne

#4 23-01-2022 15:46:30

nlancien
Membre
Distrib. : Debian Stable
Noyau : Linux 4.19.0-12-amd64
(G)UI : Openbox
Inscription : 17-07-2019

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Tu peux aussi utiliser trap pour capturer le signal du Ctrl+C et tuer ce que tu veux tuer. Peut être plus propre

Hors ligne

#5 23-01-2022 19:46:42

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Bonsoir,

je regarde toutes vos propositions et je vous dis tout çà. smile

Merci à vous.

#6 23-01-2022 20:46:39

nlancien
Membre
Distrib. : Debian Stable
Noyau : Linux 4.19.0-12-amd64
(G)UI : Openbox
Inscription : 17-07-2019

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Pensais a un truc de ce style :


#! /usr/bin/env bash

trap break SIGINT

for i in *
do
  mpv "$i"
done
 



Ca a l'air de marcher.

Évidement je suis dans un répertoire avec quelques morceaux de zik. Et rien d'autre. Et je tue par Ctrl+C

Dernière modification par nlancien (23-01-2022 20:48:57)

Hors ligne

#7 23-01-2022 21:52:53

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

@nlancien
Merci, il faut que je teste ton idée ... mais après le fonctionnement de base. Moi, avec break sur la commande dans la boucle me donne la main sur la combinaison ctrl + c dans le terminal ( quand je suis dans l'option choix ) et la touche "q" ou les touches "pgdn ou pgup" passe au morceau suivant : Donc là, c'est gagné.

Une autre option était que si j'appuie sur une touche autre que des digits, mplayer sur l'option "tout le CD" n'hurle pas dans le terminal et quitte gentiemment.

Et une autre option pour préserver Enter pour la lecture totale et un simple "q" pour quitter la lecture totale.

Je ne sais pas si c'est bien clair mon explication, mais mon essai pour l'instant à l'air, je crois, de fonctionner.
C'est peut-être pas beau, mais je post le machin :


DEVICE=$( setcd -i /dev/sr* |  grep -B1 "audio disc" | head -1 | sed -e 's/://g')



#echo -n "Entrer Le Numéro du Titre (ou plusieurs ex: 10-11) :"
echo -n "Entrer Le Numéro du Titre (ou plusieurs ex: 10 3 13) ou sur la touche Entrée pour une écoute entière :"
read -r enter




if [ ! -z "$enter" ] && [[ "$enter" != ['0123456789'] ]] ; then
echo "Invalid"
sleep 4
exit 0
else
echo "Touche Enter, donc tout"
sleep 4
mplayer -ao alsa -noconfig all -nolirc -cdrom-device "$DEVICE" cdda://"$enter" -cache 8000 -cache-min 80;

fi


if [ ! -z "$enter" ] && [[ "$enter" == ['0123456789'] ]] ; then
echo "Choix"
sleep 4  
for n in "$enter"; do    

mplayer -ao alsa -noconfig all -nolirc -cdrom-device "$DEVICE" cdda://"$n" -cache 8000 -cache-min 80 || break;

done
fi

 

Dernière modification par Anonyme (23-01-2022 21:53:32)

#8 23-01-2022 21:59:46

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Aie !!!

Dans:


['0123456789']
 



j'ai besoin de mettre la touche space avec les digits.... mais comment ?

#9 23-01-2022 22:29:59

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Hello,

1ère chose :

setcd -i /dev/sr* |  grep -B1 "audio disc" | head -1 | sed -e 's/://g'

c'est une horreur acid.gif
3 pipe, 3 commandes externes ....
Je te propose un peu mieux : 1 pipe , 1 commande externe :

setcd -i /dev/sr* | awk '/: audio disc/{sub(/:$/, "", l); print l; exit}; {l=$0}'



2ième chose:
Tu utilises read pour saisir le/les numéros de pistes, pour utiliser le résultat dans une boucle for.
Il serait judicieux de passer par un tableau :

read -ar enter
...
for n in "${enter[@]}"
do
...."



Ensuite, dans le retour de la commande "setcd -i /dev/sr*", tu as l'information du nombre de pistes, récupérable ainsi :

nb_pistes=$(setcd -i /dev/sr* | awk '/Tracks/{print $1; exit}')


Utile pour tester si il n'y a pas un nombre supérieur saisi ou indiquer le nombre de pistes dans la question ...

Au plaisir wink

Edit:
Ah oui, j'oubliais aussi :

[[ "$enter" != ['0123456789'] ]]


Pas bon, pour ce que tu veux faire.
Plutôt :

[[ "$enter" != ([[:digit:]] )*[[:digit:]] ]]

wink

Edit2:
C'est pas bon non plus ce que j'ai donné là !
Ça c'est bien plus costaud, ça résiste aux espaces entres les nombres et en début et en fin :

[[ "$enter" =~ ^( )*([[:digit:]][[:digit:]]*  *)*[[:digit:]][[:digit:]]*( )*$ ]]


Avec enter="    12 1 3     7   9      ", ça passe wink

Dernière modification par Tawal (24-01-2022 00:12:07)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#10 24-01-2022 06:09:34

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Bonjour

Tawal a écrit :

....

Edit2:
C'est pas bon non plus ce que j'ai donné là !
Ça c'est bien plus costaud, ça résiste aux espaces entres les nombres et en début et en fin :

[[ "$enter" =~ ^( )*([[:digit:]][[:digit:]]*  *)*[[:digit:]][[:digit:]]*( )*$ ]]


Avec enter="    12 1 3     7   9      ", ça passe wink




C'est impeccable smile

J'avais :


[[ $num =~ [0-9] ]]
 



bon pour les espaces et les digits mais pas bon si ça :

azertyfd2

un numéro dans une suite de lettres.


nb_pistes=$(setcd -i /dev/sr* | awk '/Tracks/{print $1; exit}')
 



utile pour l'instant pour ne pas entrer un numéro de piste inexistant. (ça me fait penser que je n'ai pas essayer).
EDIT : Oups !!! sur un cd à 16 morceaux, si je rentre 17 9 ou la gueule que le lecteur fait lol lol lol . Il faudra trouver un médicament tongue


Mais dans mon script, plus tard, je vais avoir un visuel sur le cddb.


je continue à regarder tout ce qui a été posté wink

Dernière modification par Anonyme (24-01-2022 06:23:00)

#11 24-01-2022 08:29:18

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Bon c'est pas mal pour l'instant.
Je teste tout ça dans la journée smile



Un CD Audio est détecté sur le périphérique /dev/sr0 ...
On peut continuer ...
Le dossier n'existe pas ... création du dossier .cddb
Le fichier bb0d8210 est absent.
Récupération du fichier cddb sur gnudb.gnudb.org ...
Le fichier bb0d8210 est bien rempli.
Le fichier bb0d8210 est bien encodé en UTF8.
Le fichier bb0d8210 est présent, valide et bien encodé en UTF8.

Pistes sur le CD Audio :

01 - Stop Your Sobbing
02 - Kid
03 - Brass In Pocket
04 - Talk Of The Town
05 - I Go To Sleep
06 - Day After Day
07 - Message Of Love
08 - Back On The Chain Gang
09 - Middle Of The Road
10 - 2000 Miles
11 - Show Me
12 - Thin Line Between Love And Hate
13 - Don't Get Me Wrong
14 - Hymn To Her
15 - My Baby
16 - I Got You Babe (UB40 with Chrissie Hynde)

Entrer Le Numéro du Titre (ou plusieurs ex: 10 3 13) ou sur la touche Entrée pour une écoute entière :

 

Dernière modification par Anonyme (24-01-2022 08:41:40)

#12 24-01-2022 08:51:05

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

yesssssssss !!!!

vous êtes des chefs smile

Sélection des morceaux dans le désordre ( le break sur la boucle fonctionne ) et q pour passer au morceau suivant aussi.

une pause sur l'écoute big_smile :


Un CD Audio est détecté sur le périphérique /dev/sr0 ...
On peut continuer ...
Le dossier n'existe pas ... création du dossier .cddb
Le fichier bb0d8210 est absent.
Récupération du fichier cddb sur gnudb.gnudb.org ...
Le fichier bb0d8210 est bien rempli.
Le fichier bb0d8210 est bien encodé en UTF8.
Le fichier bb0d8210 est présent, valide et bien encodé en UTF8.

Pistes sur le CD Audio :

01 - Stop Your Sobbing
02 - Kid
03 - Brass In Pocket
04 - Talk Of The Town
05 - I Go To Sleep
06 - Day After Day
07 - Message Of Love
08 - Back On The Chain Gang
09 - Middle Of The Road
10 - 2000 Miles
11 - Show Me
12 - Thin Line Between Love And Hate
13 - Don't Get Me Wrong
14 - Hymn To Her
15 - My Baby
16 - I Got You Babe (UB40 with Chrissie Hynde)

Entrer Le Numéro du Titre (ou plusieurs ex: 10 3 13) ou sur la touche Entrée pour une écoute entière :13 7
On a choisi les pistes 13 7
MPlayer SVN-r38157 (C) 2000-2019 MPlayer Team
225 audio & 468 video codecs

Playing cdda://13.
Found audio CD with 16 tracks.
Cache fill:  0.00% (0 bytes)  
Track 13
Cache fill: 68.93% (5644800 bytes)  

Cache empty, consider increasing -cache and/or -cache-min. [performance issue]

Track 13
rawaudio file format detected.
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 44100 Hz, 2 ch, s16le, 1411.2 kbit/100.00% (ratio: 176400->176400)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A: 193.5 (03:13.5) of 228.8 (03:48.8)  0.2% 49%

Exiting... (Quit)
MPlayer SVN-r38157 (C) 2000-2019 MPlayer Team
225 audio & 468 video codecs

Playing cdda://7.
Found audio CD with 16 tracks.
Cache fill:  0.00% (0 bytes)  
Track 7
Cache fill: 68.93% (5644800 bytes)  

Cache empty, consider increasing -cache and/or -cache-min. [performance issue]

Track 7
rawaudio file format detected.
Cache not responding! [performance issue]
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 44100 Hz, 2 ch, s16le, 1411.2 kbit/100.00% (ratio: 176400->176400)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Video: no video
  =====  PAUSE  =====
A:   7.7 (07.7) of 205.5 (03:25.4)  0.2% 80%

 




Et pour les accents :


Récupération du fichier cddb sur gnudb.gnudb.org ...
Le fichier 140fcc14 est bien rempli.
Le fichier 140fcc14 est encodé en charset=iso-8859-1, on le passe en UTF8.
Le fichier 140fcc14 est présent, valide et bien encodé en UTF8.

 

Dernière modification par Anonyme (24-01-2022 08:57:01)

#13 24-01-2022 10:57:38

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Pour les "Disc found in drive: mixed type CD (data/audio)" avec setcd, il va fallait modifier un peu le script.

EDIT : Donc j'ai modifié ta commande :


setcd -i /dev/sr* | awk '/: audio disc/{sub(/:$/, "", l); print l; exit}; {l=$0}'
 



par :


setcd -i /dev/sr* | awk '/: audio disc|\(data\/audio\)/{sub(/:$/, "", l); print l; exit}; {l=$0}'
 



qui me donne bien :


/dev/sr0
 



J'en ai bien ch...., mais j'ai voulu garder ton travail. smile ( Il faudrait que tu m'expliques en détail cette commande ),

Dernière modification par Anonyme (24-01-2022 11:41:54)

#14 24-01-2022 12:04:07

Anonyme
Invité

Re : [Résolu] Interrompre une commande dans une boucle (pour Script)

Ok, ça passe avec un "Disc found in drive: mixed type CD (data/audio)" :


Un CD Audio est détecté sur le périphérique /dev/sr0 ...
On peut continuer ...
Le dossier .cddb existe.
Le fichier 770f5a09 est présent.
Le fichier 770f5a09 est bien rempli.
Le fichier 770f5a09 est bien encodé en UTF8.
Le fichier 770f5a09 est présent, valide et bien encodé en UTF8.

Pistes sur le CD Audio :

01 - Moonchild
02 - Infinite Dreams
03 - Can I Play With Madness
04 - The Evil That Men Do
05 - Seventh Son Of A Seventh Son
06 - The Prophecy
07 - The Clairvoyant
08 - Only The Good Die Young
09 - Data: Videos & Biographies, Etc.

Entrer Le Numéro du Titre (ou plusieurs ex: 10 3 13) ou sur la touche Entrée pour une écoute entière :
Touche Entrée : On lit les 9 pistes du CD.
Touche q pendant la lecture : On quitte tout.
MPlayer SVN-r38157 (C) 2000-2019 MPlayer Team
225 audio & 468 video codecs

Playing cdda://.
Found audio CD with 9 tracks.
Cache fill:  0.00% (0 bytes)  
Track 1
Cache fill: 68.93% (5644800 bytes)  

rawaudio file format detected.
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 44100 Hz, 2 ch, s16le, 1411.2 kbit/100.00% (ratio: 176400->176400)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A: 316.7 (05:16.7) of 2641.6 (44:01.6)  0.2% 47%
  =====  PAUSE  =====
A: 661.7 (11:01.7) of 2641.6 (44:01.6)  0.2% 49%


 

Dernière modification par Anonyme (24-01-2022 12:05:20)

Pied de page des forums