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

#26 09-10-2024 07:51:15

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : script replay pour télécharger épisodes de replay avec les sous titres

j'ai pareil pour le shell et la version du shell, j'ai refait le test en VM (unset a[-1]) toujours le même résultat, le dernier élément est bien supprimé du tableau
D’où provient cette différence?
je veux bien une explication de la commande

a=("${a[@]//${a[-1]}/}")


(changé dans le script)
signification du slash et double slash

Dernière modification par Croutons (09-10-2024 09:52:23)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#27 09-10-2024 08:33:56

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

Re : script replay pour télécharger épisodes de replay avec les sous titres

${var//mot1/mot2} substitue dans "var" toute correspondance avec "mot1" par "mot2".
Avec l'option shell "extglob", on peut utiliser des regex en guise de motifs.

Dans le cas de notre tableau, on remplace dans la liste des éléments du tableau celui qui tous ceux qui correspondent au dernier élément par rien.

PS : Pour activer une option shell :

shopt -s nom_option


Pour désactiver une option shell :

shopt -u nom_option





Edit:
Dans la regex, le caractère \ protège le caractère suivant (le point en l'occurrence) pas le précédent wink

Edit2:
Si en utilisant un simple / à la place du double, on ne substitue que la 1ère correspondance trouvée.
Dans ton cas, on peut utiliser cette forme aussi, car tous les noms de fichiers dans un même répertoire sont uniques entre eux.

Dernière modification par Tawal (09-10-2024 09:12:43)


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

#28 09-10-2024 09:41:16

agp91
Membre
Distrib. : GNU Debian stable
(G)UI : xfce
Inscription : 12-02-2023

Re : script replay pour télécharger épisodes de replay avec les sous titres

Écrire tout le contenu du tableau dans une chaîne en y supprimant  toutes les occurrences à un motif
Puis détruire ce tableau pour le reconstruire avec cette chaîne
Alors qu'il suffit de supprimer un élément par son indexe (ce qui est déjà pour le système en réalité une lourde tache à faire)

Je ne tiens à froisser personne, mais c'est une mauvaise écriture.
Qui plus est, qui ne supporte pas les espaces.

a=( "a a" b c )
echo ${#a[*]}

3

echo ${a[0]}

a a

a=(${a[@]//${a[-1]}/})
echo ${#a[*]}

3

echo ${a[0]}

a


-----

a=("a a" b c)
unset a[$((${#a[*]}-1))]
echo ${#a[*]}

2

echo ${a[0]}

a a



Cela n'a peut etre pas d'importance.
Et puis chacun est libre de faire comme il veut wink

[edit]J'ai utilisé la commande

a=("${a[@]//${a[-1]}/}")

Sans guillemet, ce qui effectivement pose problème avec les espaces.
Mais utiliser cette commande avec les guillemets apporte un autre soucis, d'écrit plus bas dans le post #31.
(L'élément n'est pas supprimé du tableau, sa valeur est simplement vidée)

Dernière modification par agp91 (10-10-2024 11:27:38)


La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.

Hors ligne

#29 09-10-2024 10:13:01

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

Re : script replay pour télécharger épisodes de replay avec les sous titres

Aucun problème pour moi smile

$ a=("a a" b c)
$ a=( "${a[@]//"${a[-1]}"/}" )
$ echo "${a[@]}"
a a b
$ echo "${a[0]}"
a a
$


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

#30 09-10-2024 10:41:50

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : script replay pour télécharger épisodes de replay avec les sous titres

alors non

echo ${a[0]}


a a



m'affiche bien le premier élément
j'ai pas compris ce que tu as voulu démontrer

a=( "a a" b c )


a=("${a[@]//${a[-1]}/}")


echo ${a[0]}
a a


echo ${a[@]}
a a b



il reste bien 2 éléments 'a a' et 'b', le dernier élément 'c' à bien été effacer

je ne sais pas ce que la commande suivante est censé renvoyer, peut etre le nombre de case du tableau
la dernière étant vide mais pas supprimé

echo ${#a[@]}


mais ce n'est pas le nombre d'éléments dans la variable
il reste bien 2 éléments et non 3
c'est sur que sur l'affichage total des cases du tableau on pourrait croire qu'il contient 3 cases, il aurait fallu mettre des guillemets au départ pour avoir un meilleur affichage

a=( \'a a\' b c )


echo "${a[@]}"
'a a' b c

Dernière modification par Croutons (09-10-2024 10:55:51)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#31 09-10-2024 14:12:51

agp91
Membre
Distrib. : GNU Debian stable
(G)UI : xfce
Inscription : 12-02-2023

Re : script replay pour télécharger épisodes de replay avec les sous titres

Effectivement ma démonstration est fausse
J'ai du saisir la commande

a=("${a[@]//${a[-1]}/}")

sans utiliser les guillemetsops.gif

Par contre la commande

${#a[@]}

Retourne le nombre d'élément d'un tableau
Cela signifie que la commande

a=("${a[@]//${a[-1]}/}")

Préserve l'élément (puisqu'entre guillemets). Elle ne supprime pas le dernier élément, sa valeur est tout simplement vidée.

humain@DFiso:~$ a=( "a a" b c )
humain@DFiso:~$ i=0;for e in "${a[@]}";do echo "$i '${a[$i]}'";((i++));done
0 'a a'
1 'b'
2 'c'
humain@DFiso:~$ a=("${a[@]//${a[-1]}/}")
humain@DFiso:~$ i=0;for e in "${a[@]}";do echo "$i '${a[$i]}'";((i++));done
0 'a a'
1 'b'
2 ''



humain@DFiso:~$ unset a[$((${#a[*]}-1))]
humain@DFiso:~$ i=0;for e in "${a[@]}";do echo "$i '${a[$i]}'";((i++));done
0 'a a'
1 'b'



Je suis encore confus d'avoir écris des choses fausses.
Je n'interviendrait plus.out.gif

Dernière modification par agp91 (10-10-2024 11:28:29)


La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.

Hors ligne

#32 09-10-2024 14:44:37

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : script replay pour télécharger épisodes de replay avec les sous titres

ah ok
c'est bien ce que j'avais cru comprendre
l'élément est supprimer et la case du tableau reste vide

a savoir si c'est vraiment un soucis
est ce que si la case reste vide et que on ajoute un nouvel élément, il recréa une case supplémentaire au tableau? ou va il se mettre dans la case vide?

a effectivement ça peut posé soucis, d’après mes tests, si on rajoute un élément il se créé une nouvelle case laissant la dernière vide hmm

a=( "a a" b c )

#suppression dernier élément 'c'
a=("${a[@]//${a[-1]}/}")

#ajout de l'élément 'c'
a[${#a[*]}]=c
le nouvel élément 'c' occupe la case 3, laissant la case 2 vide
echo ${a[3]}
c

echo ${a[2]}
vide

'b' en position 1
'a a' en position 0



comme pour ajouter un élément tiré du wiki la
https://debian-facile.org/doc:programma … s:tableaux

edit: quid de la commande unset

a=( "a a" b c )

#supprime la dernière case et non pas seulement l'élement
unset a[-1]

#ajout de c
a[${#a[*]}]=c

echo ${a[2]}
c



'c' occupe bien la position 2, ce qui prouve que unset a bien supprimé la case et l'élément quelle contenait
(dans le cas de mon script aucune incidence)
mais dans d'autre situation ça peut devenir problématique

c'est un truc a devenir dingue ses tableaux, c'est pas encore pour tout de suite que je vais maîtriser la chose
(je détail ça me sert de note par la même occasion)

Dernière modification par Croutons (09-10-2024 14:59:44)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#33 10-10-2024 08:17:41

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : script replay pour télécharger épisodes de replay avec les sous titres

bon les sous titre au format vtt n'étant pas reconnu par tout les lecteurs, je crois bien que je vais devoir faire une variante du script pour convertir au format srt
Debian 13 devrait avoir une version de ffmpeg qui permet la conversion, en attendant
sous Debian 12, le seul logiciel capable de convertir est gaupol, ffmpeg ne permet pas la conversion

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#34 13-10-2024 15:44:52

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : script replay pour télécharger épisodes de replay avec les sous titres

un petit ajout, variante du script pour avoir les sous titre en srt, donc lisible sur la plus par des lecteurs
il serait dommage de se priver des sous-titre, même forcé
moi perso j'ai du mal quand ça me parle dans une autre langues sur certain passage
surtout le Japonais lol

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

Pied de page des forums