bash et la lecture du contenu de fichiers

Le
smu
Bonjour,

J'ai un script bash qui effectue des tâches en fonction d'un fichier "de
config". Je lis ce fichier avec la séquence suivante :

while read line
do
process_line ${line}
done < $1

Sachant que le fichier est le premier paramètre du script dont le format
est :

#commentaire
cmd option1 option2 dir

Pour la récupération des champs 'cmd', 'option1' et 'option2', je n'ai
aucun problème. La difficulté se situe sur le champ 'dir' sachant que
qu'il peut contenir des espaces.

Existe t-il une solution simple pour extraire des champs avec espace
sachant que je ne peux pas imposer un formalisme particulier ?

D'avance merci

smu
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #125436
On Thu, 17 Jan 2008 10:39:45 +0100, smu wrote:
Bonjour,

J'ai un script bash qui effectue des tâches en fonction d'un fichier "de
config". Je lis ce fichier avec la séquence suivante :

while read line
do
process_line ${line}
done < $1

Sachant que le fichier est le premier paramètre du script dont le format
est :

#commentaire
cmd option1 option2 dir

Pour la récupération des champs 'cmd', 'option1' et 'option2', je n'ai
aucun problème. La difficulté se situe sur le champ 'dir' sachant que
qu'il peut contenir des espaces.

Existe t-il une solution simple pour extraire des champs avec espace
sachant que je ne peux pas imposer un formalisme particulier ?
[...]


Pas sur de comprendre la question.

Peux-etre:

while read -r cmd option1 option2 dir; do
process "$cmd" "$option1" "$option2" "$dir"
done < "${1?}"

?

--
Stephane

smu
Le #125435
On Thu, 17 Jan 2008 10:39:45 +0100, smu wrote:
Bonjour,

J'ai un script bash qui effectue des tâches en fonction d'un fichier "de
config". Je lis ce fichier avec la séquence suivante :

while read line
do
process_line ${line}
done < $1

Sachant que le fichier est le premier paramètre du script dont le format
est :

#commentaire
cmd option1 option2 dir

Pour la récupération des champs 'cmd', 'option1' et 'option2', je n'ai
aucun problème. La difficulté se situe sur le champ 'dir' sachant que
qu'il peut contenir des espaces.

Existe t-il une solution simple pour extraire des champs avec espace
sachant que je ne peux pas imposer un formalisme particulier ?
[...]


Pas sur de comprendre la question.

Peux-etre:

while read -r cmd option1 option2 dir; do
process "$cmd" "$option1" "$option2" "$dir"
done < "${1?}"

?



Merci de vous intéresser à ma question.

Que ce passe t-il si 'dir' est quelque chose du genre :

/home/user/acquisition data/

Je vais récupérer "/home/user/acquisition" dans 'dir'.

Comment contourner ce problème ?

smu


Cyrille Lefevre
Le #125434
Merci de vous intéresser à ma question.

Que ce passe t-il si 'dir' est quelque chose du genre :

/home/user/acquisition data/

Je vais récupérer "/home/user/acquisition" dans 'dir'.


justement non, dans un read, la dernière variable ramasse tout ce qui reste.
un usage commun de cet avantage est d'utiliser une variable bidon.
dans votre cas, il ne le faut pas.

ex. :

read a b c << EOF
1 2 3 4 5
EOF
echo $c
=> 3 4 5

read a b c bidon << EOF
1 2 3 4 5
EOF
echo $c
=> 3
echo $bidon
=> 4 5

Comment contourner ce problème ?


Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.

smu
Le #125433
Merci de vous intéresser à ma question.

Que ce passe t-il si 'dir' est quelque chose du genre :

/home/user/acquisition data/

Je vais récupérer "/home/user/acquisition" dans 'dir'.


justement non, dans un read, la dernière variable ramasse tout ce qui
reste.
un usage commun de cet avantage est d'utiliser une variable bidon.
dans votre cas, il ne le faut pas.

ex. :

read a b c << EOF
1 2 3 4 5
EOF
echo $c
=> 3 4 5

read a b c bidon << EOF
1 2 3 4 5
EOF
echo $c
=> 3
echo $bidon
=> 4 5

Comment contourner ce problème ?


Regards, Cordialement,

Cyrille Lefevre.


Merci

smu


Publicité
Poster une réponse
Anonyme