Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/08/2018, à 00: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 mad 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, à 08:13)

Hors ligne

#2 Le 26/08/2018, à 14: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, à 14:19)

Hors ligne