290 votes

bash lu depuis le fichier ou stdin

En Perl, le code suivant sera lu à partir du fichier spécifié dans les arguments de la ligne de commande ou de stdin?

 while (<>) {
   print($_);
}
 

C'est très pratique. Je veux juste savoir quel est le moyen le plus simple de lire un fichier ou stdin en bash.

480voto

fgm Points 5930

Sur un système avec un système de fichiers proc

La solution suivante lit dans un fichier si le script est appelé avec un nom de fichier comme premier paramètre $1 sinon à partir de l'entrée standard.

 while read line
do
  echo "$line"
done < "${1:-/proc/${$}/fd/0}"
 

La substitution ${1:-...} prend $1 si elle est définie, sinon le nom de fichier de l'entrée standard du processus propre est utilisé.

${$} est l'ID de processus du shell actuel.

144voto

Ryan Ballantyne Points 1462

La solution la plus simple est peut-être de rediriger stdin avec un opérateur de redirection de fusion:

 #!/bin/bash
less <&0
 

Stdin est le descripteur de fichier zéro. Ce qui précède envoie les entrées vers votre script bash dans le stdin de less.

En savoir plus sur la redirection de descripteur de fichier .

23voto

Amir Mehler Points 155

Je pense que c'est le moyen le plus simple:

 $ cat reader.sh
#!/bin/bash
while read line; do
  echo "reading: ${line}"
done < /dev/stdin
 

-

 $ cat writer.sh
#!/bin/bash
for i in {0..5}; do
  echo "line ${i}"
done
 

-

 $ ./writer.sh | ./reader.sh
reading: line 0
reading: line 1
reading: line 2
reading: line 3
reading: line 4
reading: line 5
 

15voto

David Souther Points 4414

La solution echo ajoute de nouvelles lignes chaque fois que l'IFS interrompt le flux d'entrée. La réponse de @ fgm peut être modifiée un peu:

     cat "${1:-/dev/stdin}" > "${2:-/dev/stdout}"
 

3voto

Sorpigal Points 10412

Plus précisément...

 while IFS= read -r line ; do
    printf "%s\n" "$line"
done < file
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X