Cómo leer desde un archivo o entrada estándar en Bash
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.pl
leerá desde la entrada estándar, mientras que perl my.pl a.txt
leerá desdea.txt
. Esto es muy útil.
¿Existe un equivalente en Bash?
La siguiente solución lee desde un archivo si se llama al script con un nombre de archivo como primer parámetro $1
y, en caso contrario, desde la entrada estándar.
while read line
do
echo "$line"
done < "${1:-/dev/stdin}"
La sustitución ${1:-...}
tiene lugar $1
si está definida. De lo contrario, se utiliza el nombre de archivo de la entrada estándar del propio proceso.
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 .