#1 Le 23/08/2018, à 23:34
- metalux
Assigner une nouvelle valeur à un élément d'une liste ou d'un tableau
Bonjour,
Voici ce que je souhaite faire:
app=$(grep "binary" <(pacmd list-sink-inputs) | cut -d'"' -f2)
me récupère la liste des applications qui émettent du son. Pfff....dès que je ne pratique plus le bash, j'oublie tout et c'est là que je bloque.
ceci me retourne par exemple:
echo "$app"
vlc
totem
vlc
Je souhaiterais que lorsqu'il y a plusieurs instances d'une application, que les suivantes soient renommées, de préférence de la manière suivante, ou quelque chose d'équivalent pour les différencier:
vlc
vlc-2
vlc-3
Déjà je ne suis pas sûr mais ne serait-ce pas mieux d'utiliser un tableau à la place d'une variable pour réassigner plus facilement les éléments?
app=($(grep "application.name" <(pacmd list-sink-inputs) | grep -B1 application | cut -d'"' -f2))
echo "${app[@]}"
vlc totem vlc
Comment ré-assigner les éléments présents plusieurs fois dans la liste avec leur nouveau nom?
IMPORTANT: J'ai besoin de garder l'ordre des applications car j'utilise ensuite l'index de celles-ci, donc pas de solution à base de sort/uniq.
Dernière modification par metalux (Le 24/08/2018, à 07:13)
Hors ligne
#2 Le 26/08/2018, à 13:14
- metalux
Re : Assigner une nouvelle valeur à un élément d'une liste ou d'un tableau
Pas de solution pour ce que je souhaite faire?
A défaut, je numérote à l'aide d'une boucle toute les applications même si je préférais ne le faire que pour celle qui ont plusieurs instances d'ouvertes:
app=($(grep "binary" <(pacmd list-sink-inputs) |cut -d'"' -f2))
c=0
for i in "${app[@]}";do
app[$c]="$(($c+1))-$i"
((c++))
done
choix=$(yad --form --field="Source Audio ":CB --item-separator=' ' --field="Mode muet":CHK "${app[*]}" --buttons-layout=edge --button Lire --button Aide --button Quitter)
résultat:
echo "${app[@]}"
1-vlc 2-totem 3-vlc
J'obtiens bien ma liste dans yad mais obligé d'utilisé l'astérisque au lieu de l'arobase. Je suppose que yad n'accepte qu'un argument et que "${app[@]}" passe l'ensemble des arguments séparément, si vous pouviez me le confirmer.
Je préférerais obtenir:
echo "${app[@]}"
vlc totem 2-vlc
ou à défaut:
echo "${app[@]}"
1-vlc 1-totem 2-vlc
Dernière modification par metalux (Le 26/08/2018, à 13:19)
Hors ligne