GNU/Linux >> Linux Esercitazione >  >> Linux

Reindirizza l'input standard in modo dinamico in uno script bash

L'input standard può anche essere rappresentato dal file di dispositivo speciale /dev/stdin , quindi usarlo come nome file funzionerà.

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

Prima di tutto stdin è il descrittore di file 0 (zero) anziché 1 (che è stdout).

Puoi duplicare descrittori di file o utilizzare nomi di file in modo condizionale come questo:

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

some_long_command_line <&3

Nota che il comando mostrato eseguirà il secondo exec se la condizione è falsa oppure il primo exec non riesce. Se non vuoi che un potenziale fallimento lo faccia allora dovresti usare un if / else :

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

ma poi i reindirizzamenti successivi dal descrittore di file 3 falliranno se il primo reindirizzamento fallisce (dopo che la condizione era vera).


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

In una subshell, reindirizza in modo condizionale stdin ed esegui lo script.


Linux
  1. Uno script Bash può essere agganciato a un file?

  2. Perché lo script Bash non riconosce gli alias?

  3. Reindirizzare tutti i comandi successivi Stderr usando Exec?

  4. Script Bash per rimuovere il file più vecchio da una cartella?

  5. Script Bash:controlla se un file è un file di testo?

Come reindirizzare stderr a stdout in Bash

35 Esempi di script Bash

Reindirizza tutto l'output su file in Bash

Come includere un file in uno script di shell bash

Confronta le somme md5 nello script bash

Bash loop decomprimere lo script di file con password