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

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 !

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.

c’est ce que je fait.

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

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

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

Tu n’as pas compris.

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

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

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

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

Bonjour,

Je suis surpris que personne n’ait proposé :

$ program < File

Suis-je dans l’erreur ?

Cordialement

Ce n’est pas propre :slight_smile:

J’utilise une boucle while:

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

Ou

done < <(commande)

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