Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

bash et la lecture du contenu de fichiers

4 réponses
Avatar
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

4 réponses

Avatar
Stephane Chazelas
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

Avatar
smu
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


Avatar
Cyrille Lefevre
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.

Avatar
smu
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