GNU/Linux >> Tutoriales Linux >  >> Linux

Redirigir la entrada estándar dinámicamente en un script bash

La entrada estándar también se puede representar mediante el archivo de dispositivo especial /dev/stdin , así que usarlo como nombre de archivo funcionará.

file="/dev/stdin"
./myscript < "$file"

En primer lugar, stdin es el descriptor de archivo 0 (cero) en lugar de 1 (que es stdout).

Puede duplicar los descriptores de archivo o usar nombres de archivo condicionalmente como este:

[[ some_condition ]] && exec 3<"$filename" || exec 3<&0

some_long_command_line <&3

Tenga en cuenta que el comando que se muestra ejecutará el segundo exec si la condición es falsa o el primer exec falla Si no desea una posible falla al hacerlo, debe usar un if / else :

if [[ some_condition ]]
then
    exec 3<"$filename"
else
    exec 3<&0
fi

pero luego las redirecciones subsiguientes desde el descriptor de archivo 3 fallarán si la primera redirección falló (después de que la condición fuera verdadera).


(
    if [ ...some condition here... ]; then
        exec <$fileName
    fi
    exec ./myscript
)

En un subshell, redirija condicionalmente stdin y ejecute el script.


Linux
  1. ¿Por qué The Bash Script no reconoce los alias?

  2. Bash Script para eliminar el archivo más antiguo de una carpeta?

  3. ¿Cómo agregar datos al búfer en el script de Shell?

  4. ¿Cómo verificar la subcadena en Shell Script Bash?

  5. Bash Script - Cómo leer la entrada del usuario

Cómo redirigir stderr a stdout en Bash

35 ejemplos de secuencias de comandos Bash

Redirigir toda la salida al archivo en Bash

Cómo incluir un archivo en un script de shell bash

Compara sumas md5 en script bash

Bash loop descomprimir secuencia de comandos de archivo con contraseña