GNU/Linux >> Znalost Linux >  >> Linux

Přesměrujte standardní vstup dynamicky v bash skriptu

Standardní vstup může být také reprezentován speciálním souborem zařízení /dev/stdin , takže použití jako název souboru bude fungovat.

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

Za prvé, stdin je deskriptor souboru 0 (nula) spíše než 1 (což je stdout).

Můžete duplikovat deskriptory souborů nebo používat názvy souborů podmíněně takto:

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

some_long_command_line <&3

Všimněte si, že zobrazený příkaz provede druhý exec pokud je buď podmínka nepravdivá nebo první exec selže. Pokud si nepřejete, aby to došlo k potenciálnímu selhání, měli byste použít if / else :

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

ale pak následná přesměrování z deskriptoru souboru 3 selžou, pokud se první přesměrování nezdařilo (poté, co byla podmínka splněna).


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

V subshell podmíněně přesměrujte stdin a spusťte skript.


Linux
  1. Proč skript Bash nerozpozná aliasy?

  2. Bash skript k odstranění nejstaršího souboru ze složky?

  3. Jak připojit data do vyrovnávací paměti ve skriptu Shell?

  1. Bash Script - Jak číst uživatelský vstup

  2. Bash skript:špatný interpret

  3. Přesměrujte veškerý výstup do souboru v Bash

  1. Může být Bash skript připojen k souboru?

  2. Přesměrovat Stderr všech následujících příkazů pomocí Exec?

  3. Jak grep pro unicode � ve skriptu bash