Cómo leer desde un archivo o entrada estándar en Bash

Resuelto Dagang Wei asked hace 13 años • 22 respuestas

El siguiente script Perl ( my.pl) puede leer desde el archivo en los argumentos de la línea de comando o desde la entrada estándar (STDIN):

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

perl my.plleerá desde la entrada estándar, mientras que perl my.pl a.txtleerá desdea.txt . Esto es muy útil.

¿Existe un equivalente en Bash?

Dagang Wei avatar Aug 08 '11 16:08 Dagang Wei
Aceptado

La siguiente solución lee desde un archivo si se llama al script con un nombre de archivo como primer parámetro $1y, en caso contrario, desde la entrada estándar.

while read line
do
  echo "$line"
done < "${1:-/dev/stdin}"

La sustitución ${1:-...}tiene lugar $1si está definida. De lo contrario, se utiliza el nombre de archivo de la entrada estándar del propio proceso.

Fritz G. Mehner avatar Aug 12 '2011 19:08 Fritz G. Mehner

Quizás la solución más sencilla sea redirigir la entrada estándar con un operador de redirección fusionado:

#!/bin/bash
less <&0

La entrada estándar es el descriptor de archivo cero. Lo anterior envía la entrada canalizada a su script bash a la entrada estándar de less .

Lea más sobre la redirección de descriptores de archivos .

Ryan Ballantyne avatar May 10 '2013 20:05 Ryan Ballantyne