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 06/04/2026, à 17:06

JM3863

(Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonjour
Je n'arrive pas à lire un fichier txt
le nombre d'enregistrements marche (à l'issue du cat)
mais  la lecture de marche pas (le fichier à lire doit il être dans le même répertoire?
j'ai essayé avec fichier ="/home/jojo/JM/analyse/Liste_test.txt"   ça ne marche pas
quelle est la différence entre read et ligne?
j'ai essayé sans changer le IFS c'est pareil

j'ai essayé while read line; do echo -e "$line"; done < /home/jojo/JM/analyse/Liste_test.txt
ça ne marche pas
y a t'il une instruction d'ouverture de fichier,avec test de status?
je ne sais pas s'il ne trouve pas le fichier ou les enregistrements?


mon SH

#!/bin/bash
x=$(cat /home/jojo/JM/analyse/Liste_test.txt |wc -l)
notify-send  " Nombre enregistrements :"$x
cd /home/jojo/JM/analyse
fichier="Liste_test.txt"
notify-send  " Fichier= :"$fichier
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

for ligne in $(<$fichier)
do
  notify-send  "ligne"$ligne
done

Mon fichier

un 123456
deux 123456
trois 123456
quatre 123456
cinq prpogpfspseg

modération : scission du fil [Resolu] lire un fichier ligne par ligne en bash 

Dernière modification par JM3863 (Le 08/04/2026, à 12:28)

Hors ligne

#2 Le 07/04/2026, à 16:20

Watael

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

salut,

le fichier est-il au format Unix, ou DOS ?

file /chemin/vers/tonFichier

« ça marche pas » n'est pas la description de symptômes.
tu ne vas pas chez le médecin en disant « ch'uis balade » lol
wink

Dernière modification par Watael (Le 07/04/2026, à 16:22)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 07/04/2026, à 17:28

erresse

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonjour,
Au lieu de :

notify-send  " Fichier= :"$fichier

essaie plutôt :

notify-send  " Fichier= : $(cat $fichier)"

Si tu ne listes pas le fichier il ne peut pas afficher le contenu, juste le nom qui est dans la variable.

Dernière modification par erresse (Le 07/04/2026, à 17:29)


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#4 Le 07/04/2026, à 17:45

Watael

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

j'avais compris que le but est justement d'afficher uniquement le nom du fichier, pour savoir quel fichier va être traité...
puisque le fichier est lu ligne par ligne, elles sont affichées l'une après l'autre par notify-send dans la boucle.

Dernière modification par Watael (Le 07/04/2026, à 17:49)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 07/04/2026, à 17:49

iznobe

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

mon SH

#!/bin/bash
x=$(cat /home/jojo/JM/analyse/Liste_test.txt |wc -l)
notify-send  " Nombre enregistrements :"$x
cd /home/jojo/JM/analyse
fichier="Liste_test.txt"
notify-send  " Fichier= :"$fichier
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

for ligne in $(<$fichier)
do
  notify-send  "ligne"$ligne
done

Bonjour , c ' est normal vu que :
fichier="Liste_test.txt"
donc , " notify-send  " Fichier= :"$fichier " ne renvoi rien du tout , puisque " Liste_test.txt " n ' existe pas dans ton home ...
De plus , il ne faut pas faire de " CD /machin " dans un script , je suis étonné que @Watael n ' est pas sauté sur l' occasion de faire une piqure de rappel tongue


Essaie plutôt comme ça :

#!/bin/bash

fichier="/home/jojo/JM/analyse/Liste_test.txt"
x="$(cat $fichier |wc -l)"
notify-send  "Nombre enregistrements : $x"

notify-send  "Fichier = $fichier"
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

for ligne in $(<$fichier)
do
  notify-send  "ligne=$ligne"
done

ou en changeant : " for ligne in $(<$fichier) " par : " for ligne in "$fichier " .

Dernière modification par iznobe (Le 07/04/2026, à 17:52)

Hors ligne

#6 Le 07/04/2026, à 17:54

Watael

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

" for ligne in "$fichier " 

ah, non ! là, c'est toi qui te pique. lol

modifier l'IFS pour lire un fichier est de toute façon une mauvaise pratique.
comme cd, il y a de fortes chances de s'y perdre. wink

j'attendais la réponse JM3863 à ma question pour donner un script type de lecture de fichier, selon les pratiques les plus strictement orthodoxes. big_smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 07/04/2026, à 19:17

JM3863

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonsoir et merci beaucoup
j'ai essayé ça

#!/bin/bash

fichier="/home/jojo/JM/analyse/Liste_test.txt"
x="$(cat $fichier |wc -l)"
notify-send  "Nombre enregistrements : $x"

notify-send  "Fichier =" $fichier
notify-send  "Fichier =  $fichier"
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

for ligne in $(<$fichier)
do
  notify-send  "ligne=$ligne"
done
et ça marche nickel
j'ai fait 2 lignes 
notify-send  "Fichier =" $fichier
notify-send  "Fichier =  $fichier"

je suis surpris que celle-ci notify-send  "Fichier =  $fichier" marche
j'aurais pensé qu'il affiche : Fichier =$fichier car $fichier étant dans l'entre cotes, je ne pensais pas qu'il pourrait être interprété comme étant la valeur du champ fichier
dans le premier affichage notify-send  "Fichier =" $fichier  il y a un saut de ligne

quant au CD /home je l'avais mis car ne reconnaissant pas le fichier (à cause de l'espace fichier espace = ) je pensais qu'il fallait qu'il soit dans le même dossier
il n'est donc pas necessaire de passer par une commande cat

j'avais essayé ce qui suit , mais rien n'a marché,je n'avais pas tous les enregistrements

cat "$fichier" | while read ligne; do
   notify-send "Enreg_1" $ligne
done

et

for ligne in $(cat "$fichier")
do
   notify-send "Enreg_4" $ligne
done

et
while read ligne; do
    notify-send "Enreg_4bis" $ligne
done << EOL
$(cat "$fichier")
EOL
while ligne in $(cat "$fichier")
do
   notify-send "Enreg_5" $ligne
done

Dernière modification par xubu1957 (Le 08/04/2026, à 09:40)

Hors ligne

#8 Le 07/04/2026, à 19:50

Watael

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Watael a écrit :

salut,

le fichier est-il au format Unix, ou DOS ?

file /chemin/vers/tonFichier

« ça marche pas » n'est pas la description de symptômes.
tu ne vas pas chez le médecin en disant « ch'uis balade » lol
wink


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 07/04/2026, à 20:27

MicP

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonjour

En un peu plus court :

#!/bin/bash

fichier="/home/jojo/JM/analyse/Liste_test.txt"

notify-send  "Fichier =  $fichier"
notify-send  "Nombre enregistrements : $(wc -l < $fichier)"

while read ligne; do
    notify-send "$ligne"
done < "$fichier"

Dernière modification par MicP (Le 07/04/2026, à 20:31)

Hors ligne

#10 Le 07/04/2026, à 20:44

Watael

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

pas plus court, mais moins de commandes externes tongue

#!/bin/bash

fichier='/home/jojo/JM/analyse/Liste_test.txt'
mapfile -t lines <"$fichier"

notify-send  "Fichier : $fichier"$'\n'"Nombre enregistrements : ${#lines[*]}"

for line in "${lines[@]}"; do notify-send "$line"; done <"$fichier"

Dernière modification par Watael (Le 07/04/2026, à 21:07)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 07/04/2026, à 20:54

JM3863

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonsoir et merci
j'ai executé ça

#!/bin/bash

fichier="/home/jojo/JM/analyse/Liste_test.txt"
x="$(cat $fichier |wc -l)"
notify-send  "Nombre enregistrements : $x"

notify-send  "Fichier =" $fichier
notify-send  "Fichier =  $fichier"
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

for ligne in $(<$fichier)
do
  notify-send  "ligne=$ligne"
done



fachier="/home/jojo/JM/analyse/Liste_test.txt"

notify-send  "Fachier =  $fachier"
notify-send  "Nombre enregistrements : $(wc -l < $fachier)"

while read ligne; do
    notify-send "$ligne"
done < "$fachier"

Et ça marche  (il faut bien mettre  < "$fachier"  après le done
pour la première question j'ai créé le fichier txt sous linux (clic droit création de fichier avec extension txt
quant aux cotes (") j'ai remarqué que si on  fait notify-send toto
il est affiché toto, comme si on  fait notify-send "toto"
A quoi servent les codes ?
merci

Dernière modification par xubu1957 (Le 08/04/2026, à 09:39)

Hors ligne

#12 Le 07/04/2026, à 21:31

JM3863

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonsoir
les 3 marchent MERCI
quelle richesse linux!!

voici mon sh

#!/bin/bash

fichier="/home/jojo/JM/analyse/Liste_test.txt"
x="$(cat $fichier |wc -l)"
notify-send  "Nombre enregistrements : $x"

notify-send  "Fichier =" $fichier
notify-send  "Fichier =  $fichier"
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

for ligne in $(<$fichier)
do
  notify-send  "ligne=$ligne"
done



fachier="/home/jojo/JM/analyse/Liste_test.txt"

notify-send  "Fachier =  $fachier"
notify-send  "Nombre enregistrements : $(wc -l < $fachier)"

while read ligne; do
    notify-send "$ligne"
done < "$fachier"


fuchier='/home/jojo/JM/analyse/Liste_test.txt'
mapfile -t lines <"$fuchier"

notify-send  "Fuchier : $fuchier"$'\n'"Nombre enregistrements : ${#lines[ ]}"

for line in "${lines[@]}"; do notify-send "$line"; done <"$fuchier"

Dernière modification par xubu1957 (Le 08/04/2026, à 09:39)

Hors ligne

#13 Le 07/04/2026, à 21:35

JM3863

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

j'ai enlevé l'étoile  dans le message précédent dans cette instruction suivante

notify-send  "Fuchier : $fuchier"$'\n'"Nombre enregistrements : ${#lines[ ]}"

car le message était en erreur

La balise [*] a été trouvée sans balise [/*] correspondante
(problème de balise étoile sans fermeture et ne pouvait être envoyé

Dernière modification par xubu1957 (Le 08/04/2026, à 09:41)

Hors ligne

#14 Le 07/04/2026, à 21:58

Watael

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

La balise [*] a été trouvée sans balise [/*] correspondante

bah oui ! puisque tu n'utilises pas les balises CODE du forum pour poster du code !
[*] [/*], c'est pour écrire les éléments d'une liste sur le forum.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#15 Le 07/04/2026, à 22:01

xubu1957

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonjour,

Pour éviter aux aidants de se crever les yeux > Lecture conseillée mémento des balises code.


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [ Résolu ] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

Hors ligne

#16 Le 08/04/2026, à 09:35

JM3863

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

#!/bin/bash

fichier="/home/jojo/JM/analyse/Liste_test.txt"
x="$(cat $fichier |wc -l)"
notify-send  "Nombre enregistrements : $x"

notify-send  "Fichier =" $fichier
notify-send  "Fichier =  $fichier"
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

for ligne in $(<$fichier)
do
  notify-send  "ligne=$ligne"
done



fachier="/home/jojo/JM/analyse/Liste_test.txt"

notify-send  "Fachier =  $fachier"
notify-send  "Nombre enregistrements : $(wc -l < $fachier)"

while read ligne; do
    notify-send "$ligne"
done < "$fachier"


fuchier='/home/jojo/JM/analyse/Liste_test.txt'
mapfile -t lines <"$fuchier"

notify-send  "Fuchier : $fuchier"$'\n'"Nombre enregistrements : ${#lines[*]}"

for line in "${lines[@]}"; do notify-send "$line"; done <"$fuchier"

nb
il faut bien mettre done < "$fachier"

c'est mieux ainsi ?
Merci
JM

Dernière modification par xubu1957 (Le 08/04/2026, à 09:47)

Hors ligne

#17 Le 08/04/2026, à 09:43

xubu1957

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonjour,

Rajout des balises code manquantes dans tes autres messages.      tongue


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [ Résolu ] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

Hors ligne

#18 Le 08/04/2026, à 09:46

iznobe

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

nb
il faut bien mettre done < "$fachier"

heureusement que tu n' as pas mis un " a " juste avant le i, et que tu as juste remplacer le " i " par un " a " tongue

et pareil dans ta dernière ligne de code :

for line in "${lines[@]}"; do notify-send "$line"; done <"$fuchier"

sauf que là c ' est un " u " ...

PS :

c'est mieux ainsi ?

on ne met que le code entre balise code , pas le simple texte .

Dernière modification par iznobe (Le 08/04/2026, à 10:26)

Hors ligne

#19 Le 08/04/2026, à 11:07

MicP

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Bonjour

Dans la première page du manuel de la commande notify-send

man notify-send

…on peut lire l'extrait suivant :

…
SYNOPSIS

       notify-send [OPTIONS] {summary} [body]
…

On peut en déduire que les arguments OPTIONS et body sont facultatifs puisqu'ils sont "encadrés" par les caractères [ et ]

Donc, si tu ne donnes comme argument qu'une seule chaîne de caractères (qui ne puisse pas être interprétée comme étant une option),
cette chaîne de caractères sera interprétée comme étant le contenu de summary.

======
Si la ligne de commande est :

notify-send un 123456

"un" sera considéré comme étant le premier argument donné à la commande, et "123456" comme étant le second argument.

Comme "un" ne correspond à aucune option reconnue par la commande notify-send, il sera interprété comme étant le contenu de summary
et l'argument "123456" sera interprété comme étant le contenu de body

Si la ligne de commande est :

notify-send "un 123456"

toute la chaîne de caractère "un 123456" sera interprétée comme étant un seul argument,
et comme le contenu de cette chaîne de caractères ne correspond à aucune option que notify-send pourrait reconnaître,
l'argument "un 123456" sera interprété comme étant le contenu de summary

=======
Voir aussi : freedesktop.org -> Desktop Notifications Specification

Dernière modification par MicP (Le 08/04/2026, à 15:39)

Hors ligne

#20 Le 08/04/2026, à 12:27

JM3863

Re : (Résolu Merci) Je n'arrive pas à lire un fichier txt

Merci beaucoup pour votre réactivité et votre aide
je ferme ce post et j'en ai créé un autre !!
Désolé
JM

Hors ligne