Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 28/02/2010, 13h28   #1
Membre habitué
 
Avatar de Mandalar
 
Étudiant
Inscription : mai 2004
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2004
Messages : 121
Points : 107
Points : 107
Envoyer un message via MSN à Mandalar
Par défaut Problème de formatage de variable texte

Bonjour,
Je suis débutant sous linux et je voulais faire un script permettant d'automatiser la lecture de fichiers avec VLC.
Malheureusement je n'arrive pas à envoyer des paramêtres sous forme de variable texte correctement :

La commande :
Code :
 vlc '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3'
fonctionne (lancement de VLC sur les bons morceaux).

Alors que :
Code :
1
2
vartext="'/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3'"                                       
vlc $vartext
ne fonctionne pas (il sépare les arguments a chaque espace, ignorant (?) les quote).

J'ai essayé pas mal de combinaisons (inverser les ' et les " dans la deuxième commande, ce qui semblait logique) mais rien ne fonctionne...

Help!
Mandalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 15h30   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
UMQ
Code :
1
2
vartext="'/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3'"
vlc "$vartext"
ou utilise un tableau :
Code :
1
2
vartext=( '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3' )
vlc "${vartext[@]}"
Code :
1
2
3
printf '%s\n' "${vartext[@]}"
/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3
/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 16h26   #3
Membre habitué
 
Avatar de Mandalar
 
Étudiant
Inscription : mai 2004
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2004
Messages : 121
Points : 107
Points : 107
Envoyer un message via MSN à Mandalar
Salut,
La première solution ne fonctionne pas :
Citation:
cannot open file '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3' (Aucun fichier ou dossier de ce type)
En fait il ne voit qu'un seul paramètre qu'il ne peut évidemment pas gérer.

Avec la deuxième, ça fonctionne mais j'aimerais bien réussir à y arriver simplement (en manipulant seulement des string). De plus je n'arrive pas à automatiser le traitement en prenant un fichier en entrée! :
La ligne avec les chemins des deux fichiers est dans le fichier musicfiles2. Je rentre :
Code :
1
2
3
4
5
$ cat musicfiles2
'/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3'                                                   
$ text=$(cat musicfiles2)
$ var=( $text )          
$ vlc "${var[@]}"
Et ça pose le problème du début (les espaces ne sont pas bien gérés).

Une idée ? Ca vient peut-être de la définition du tableau var vu que je savais pas trop comment la faire.
Mandalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 17h35   #4
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
mouaip... ce sera pas aussi simple que j'ai voulu le croire...
en étant tordu :
Code :
1
2
3
4
unset var; while read line; do var+=( "'${line//\'/}'" ); done < <(sed "s/' '/'\n'/g" musicfiles2)
vlc "$var[@]}"
# ou
# vlc $(printf "'%s' " "${var[@]//\'/}")
...
?

En amont, comment remplis-tu le fichier musicfiles2 ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 18h15   #5
Membre habitué
 
Avatar de Mandalar
 
Étudiant
Inscription : mai 2004
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2004
Messages : 121
Points : 107
Points : 107
Envoyer un message via MSN à Mandalar
Là ça marche plus du tout
Tu peux m'expliquer ce que tu essaies de faire ? Je regarderai en détail quand on aura trouvé quelque chose qui fonctionne bien mais juste pour comprendre globalement déjà.

Je remplis le fichier musicfiles2 après une recherche de chemins absolus (avec find) et je l'arrange un peu pour mettre des guillemets autour de chaque fichier. En gros si tu as une idée de la forme qu'il devrait avoir pour que ça marche mieux ça doit être possible de s'arranger !


En fait ce que je comprends vraiment pas du tout, c'est que ça devrait être simple (il me semble), et que ceci ne marche pas :
Si je copie simplement dans la console la commande :
Code :
vlc '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3'
C'est tout bon!

Alors qu'en faisant :
Code :
1
2
$ test="vlc '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Walt Disney - Le Roi Lion - Hakuna M.mp3' '/media/disk/Users/Aurelien/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/Wanted.mp3'"  
$ $test
ou la même avec :
Ben ça marche pas.

Pourtant (je crois) le guillemet double (") ne devrait pas empecher la lecture des caractères comme le guillemet simple (').
Qu'est-ce que je loupe ?

Dernière modification par Mandalar ; 28/02/2010 à 18h26.
Mandalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 19h23   #6
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
vlc semble avoir une manière particulière de lire les noms de fichiers, parce qu'un "simple"
Code :
unset var; while read line; do var+=( "${line}" ); done < musicfiles2
puis : fonctionne, en enchaînant les morceaux.
??
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 21h09   #7
Membre habitué
 
Avatar de Mandalar
 
Étudiant
Inscription : mai 2004
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2004
Messages : 121
Points : 107
Points : 107
Envoyer un message via MSN à Mandalar
Pour info j'ai "résolu" le problème en créant un fichier de playlist :
Il suffit de mettre tous les noms de fichiers a la suite (un par ligne) sans aucun formatage particulier, de nommer le fichier blabla.vlc et d'exécuter :

Mais ça m'intéresse toujours de trouver pourquoi on n'y arrive pas en ligne de commande! Parce que vlc ne devrait pas voir les variables (qui sont interprétées par la console) et les deux commandes que j'ai mises tout à l'heure devraient être équivalente, à moins qu'il y ait un problème d'encode / formatage que je vois pas ?

D'ailleurs j'ai pas de commande "play" chez moi, tu la sors d'où ?
Mandalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 22h36   #8
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Citation:
Envoyé par Mandalar
Pour info j'ai "résolu" le problème en créant un fichier de playlist


play vient de SoX.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 22h43   #9
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Pour tout mettre dans une variable, voici comment j'ai fait:
Code :
1
2
var=$(echo -e "nom du premier fichier\nnom du deuxième fichier")
vlc $var
Ainsi, les noms de fichiers sont séparés par des retours à la ligne et vlc les accepte.
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2010, 23h57   #10
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677

VLC 0.8.6h Janus
n'en veux pas non plus.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2010, 08h10   #11
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Ha désolé, j'en suis à la version 1.0.4 (Goldeneye).

Edit: mise à jour ce matin: vlc version 1.0.5.
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2010, 20h54   #12
Membre habitué
 
Avatar de Mandalar
 
Étudiant
Inscription : mai 2004
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2004
Messages : 121
Points : 107
Points : 107
Envoyer un message via MSN à Mandalar
Bon, j'ai réussi à faire ce que je voulais (avec une playlist) même si le problème n'est pas vraiment résolu vu que je ne comprends vraiment pas le fonctionnement de la console...

Bref je mets le tag "résolu", merci pour les réponses !
Mandalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h14.


 
 
 
 
Partenaires

Hébergement Web