Qui voudrait m'aider pour la réalisation d'un script bash ?

Solutions (8)
Tags :
  • Album
  • Script
  • Programmation
|
Bonjour,

Je bloque sur la réalisation d'un script bash.

Je souhaite encoder un fichier (track01.cdda.flac) en FLAC (avec la commande flac).
J'ai donc repris cet exemple pour illustrer mon problème.

FLAC permet d'ajouter au fichier des meta-données (des tags).
flac permet l'ajout de ces tags à l'encodage du fichier via l'option --tag (--tag=TAG=value) [cf. man flac]

Je souhaite mettre mes différents tags dans une même variable; et c'est là où ça coince.
Si ma valeur (value) contient des espaces, la ligne de commande est mal interprétée.
Les guillemets (quotes) ne sont pas interprétés comme tel, et j'ai donc une erreur d'arguments
De plus, les tags commencent par un guillemet.

Voici le contenu de mon fichier d'exemple (le mien s'appelle flac_args.sh), ainsi que la ligne de commade pour l'appeler (à la fin en commentaire).

#/bin/bash

album="Mon album"
artist="Mon artiste"
title="Mon titre"

arguments="--tag=ALBUM=\"$album\" --tag=ARTIST=\"$artist\" --tag=TITLE=\"$title\""

echo $arguments
flac track01.cdda.wav $arguments

#rm track01.cdda.flac; ./flac_args.sh; metaflac --list track01.cdda.flac | grep comment
  • Meuniers a édité ce message
Contenus similaires
Score
0
òh
òi
|
Allez, je fourni un autre fichier exemple, qui je l'espère sera plus clair.
Cette fois 2 fichiers fichier n1 et fichier n2.
NB: Les commandes touch et rm sont uniquement là pour créer et supprimer les fichiers, ce n'est pas celles-là qu'il faut modifier.
  1. #!/bin/bash
  2. f1="fichier n1"
  3. f2="fichier n2"
  4. #créer les fichiers
  5. touch "$f1" "$f2"
  6. # concaténer les arguments
  7. args="\"$f1\" \"$f2\""
  8. # Afficher les arguments, puis lancer la commande ls
  9. echo "arguments :" $args
  10. ls $args
  11. # supprimer les fichiers
  12. rm "$f1" "$f2"
  • Commenter cette réponse |
Score
0
òh
òi
|
Ou sinon je garde espoir que quelqu'un réponde à ma question.

réponse n° 1 : le caractère anti-slash (\) n'est pas mieux interprété que les guillemets (").

réponse n°2 : ta solution créé 2 fichiers (un 'le' et un 2e 'fichier'), or ce n'est pas le but recherché.

Mais merci pour vos réponses.
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
il t'as déjà répondu, mais si tu veux on peut faire une boucle infinie ou tu reposes la même question et il te répond la même chose ? :) 
  • Commenter cette réponse |
Score
0
òh
òi
|
Ce que je cherche à faire, c'est exécuter la commande ls "le fichier" qui est contenu dans une variable.

Autrement dit : Comment dois-je faire pour que l'espace entre le et fichier ne soit pas interprété comme un séparateur d'arguments par bash ? Si toutefois cela est possible.
  • Commenter cette réponse |
Score
0
òh
òi
|
  1. #!/bin/bash
  2. f="le fichier"
  3. touch $f
  4. l="ls $f"
  5. # commande $l ie. ls "le fichier"
  6. echo $l
  7. $l
  8. rm "$f"


Citation :
ls le fichier
fichier le
rm: impossible de supprimer « le fichier »: Aucun fichier ou dossier de ce type
  • Commenter cette réponse |
Score
0
òh
òi
|
Personne ?

Alors voici un autre exemple encore plus rudimentaire.
Le problème est toujours le même : comment faire en sorte que bash interprète les guillemets?
  1. #!/bin/bash
  2.  
  3. f="le fichier"
  4.  
  5. touch "$f"
  6.  
  7. l="ls \"$f\""
  8.  
  9. # commande $l ie. ls "le fichier"
  10. echo $l
  11. $l
  12.  
  13. rm "$f"

En exécutant ce programme, vous aurez des messages vous informant que les fichiers "le et fichier" sont introuvables.
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui, celà ne change rien. Si ce n'est que dans mon fichier flac, j'ai "Mon\ au lieu de "Mon.

Le problème, c'est que le shell ne semble pas interpréter les caractères spéciaux comme il le fait d'habitude.
  • Commenter cette réponse |
Score
0
òh
òi
|
Et as tu essayé:
  1. album="Mon\ album"
  2. artist="Mon\ artiste"
  3. title="Mon\ titre"
  4.  
  5. arguments="--tag=ALBUM=\"$album\" --tag=ARTIST=\"$artist\" --tag=TITLE=\"$title\""

  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS