# \[Bash\] Comment passer le contenu d'un fichier texte en entrée de programme?

**URL:** <https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824>\
**Category:** Programmation\
**Created:** [Avril 12, 2024, 5:45 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824 "2024-04-12T17:45:22Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Avril 12, 2024, 5:45 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/1 "2024-04-12T17:45:22Z")

</div>

Bonjour,

J’ai un problème pour passer le contenu d’un fichier texte sur l’entrée d’un programme avec bash.

Je pensais pouvoir faire :  
cat File | program

Mais j’obtiens un End\_Error, disant que l’on a atteind la fin du fichier, au moment de lire la dernière ligne.

Le programme fonctionne si on entre les donnée sur l’entrée standard.

Si vous aviez la bonne pratique pour la redirection le l’entrée ?

S’il vous plait !

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Avril 12, 2024, 6:00 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/2 "2024-04-12T18:00:00Z")

</div>

considère utiliser une variable d’entrée:  
`programme var`  
où var est le nom complet du fichier.  
Dans le script tu récupère la variable `$1` qui sera le nom du fichier.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Avril 12, 2024, 6:01 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/3 "2024-04-12T18:01:59Z")

</div>

c’est ce que je fait.

La ligne exacte : cat $1 | program $2 $3

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Avril 12, 2024, 6:15 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/4 "2024-04-12T18:15:31Z")

</div>

En détail :

J’ai un script à appeller qui fait

cat $1 | mainstart $2 $3

mainstart appelle make pre prepare project

et pre et project attendent sur l’entrée standard

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Avril 12, 2024, 6:40 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/5 "2024-04-12T18:40:30Z")

</div>

> [@anon2873143](#):
>
> End\_Error

tu as essayé avec un autre fichier?  
ou alors que donne `cat File | grep "A"`

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Avril 12, 2024, 6:44 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/6 "2024-04-12T18:44:17Z")

</div>

> [@anon2873143](#):
>
> La ligne exacte : cat $1 | program $2 $3

Tu n’as pas compris.

C’est ton script qui lit le fichier, pas la commande cat.

```auto
old_IFS=$IFS # sauvegarde du séparateur de champ  
IFS=$'\n' # nouveau séparateur de champ, le caractère fin de ligne  
for ligne in $(cat $1)  
do  
   commande  
done  
IFS=$old_IFS # rétablissement du séparateur de champ par défaut

```

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Avril 12, 2024, 6:56 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/7 "2024-04-12T18:56:31Z")

</div>

je cherche une redirection de l’entrée standard.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Avril 12, 2024, 7:33 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/8 "2024-04-12T19:33:19Z")

</div>

Ok !  
Merci en tout cas.  
J’ai résolu mon problème.

---

<div class="post-metadata">

**Author:** ![miko](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/f14d63/32.png) [@miko](https://www.debian-fr.org/u/miko)\
**Post date:** [Avril 17, 2024, 7:02 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/9 "2024-04-17T07:02:15Z")

</div>

Bonjour,

Je suis surpris que personne n’ait proposé :

`$ program < File`

Suis-je dans l’erreur ?

Cordialement

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Avril 17, 2024, 2:09 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/10 "2024-04-17T14:09:13Z")

</div>

Ce n’est pas propre 🙂

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Avril 18, 2024, 4:58 UTC](https://www.debian-fr.org/t/bash-comment-passer-le-contenu-dun-fichier-texte-en-entree-de-programme/89824/11 "2024-04-18T16:58:08Z")

</div>

J’utilise une boucle while:

```auto
while read -r ligne ; do
    commande "$ligne"
done < fichier

```

Ou

```auto
done < <(commande)

```

si l’entrée est issue d’une autre commande plutôt que d’un fichier.
