GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Standardeingabe dynamisch in einem Bash-Skript umleiten

Die Standardeingabe kann auch durch die spezielle Gerätedatei /dev/stdin dargestellt werden , also funktioniert die Verwendung als Dateiname.

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

Zunächst einmal ist stdin Dateideskriptor 0 (Null) und nicht 1 (was stdout ist).

Sie können Dateideskriptoren duplizieren oder Dateinamen bedingt wie folgt verwenden:

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

some_long_command_line <&3

Beachten Sie, dass der gezeigte Befehl den zweiten exec ausführt wenn entweder die Bedingung falsch oder ist die erste exec scheitert. Wenn Sie nicht möchten, dass ein potenzieller Fehler dies tut, sollten Sie einen if verwenden / else :

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

aber dann schlagen nachfolgende Umleitungen von Dateideskriptor 3 fehl, wenn die erste Umleitung fehlgeschlagen ist (nachdem die Bedingung wahr war).


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

Leiten Sie in einer Subshell stdin bedingt um und führen Sie das Skript aus.


Linux
  1. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  2. Warum erkennt das Bash-Skript keine Aliase?

  3. Stderr aller nachfolgenden Befehle mit Exec umleiten?

  4. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  5. Bash-Skript:Prüfen, ob eine Datei eine Textdatei ist?

So leiten Sie stderr in Bash auf stdout um

35 Bash-Skriptbeispiele

Wie kann man Bash-Skripte in Vim hervorheben?

So schließen Sie eine Datei in ein Bash-Shell-Skript ein

Bash-Schleife zum Entpacken von passwortgeschützten Dateien

Wie man in einem Bash-Skript nach Unicode sucht