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

Umleitung der Ausgabe von einem Funktionsblock in eine Datei unter Linux

Die Art und Weise, wie Sie vorschlagen, ist eigentlich vollkommen gültig. Das Bash-Handbuch gibt die Funktionsdeklarationssyntax wie folgt an (Hervorhebung von mir):

Funktionen werden mit dieser Syntax deklariert:

name () compound-command [ redirections ]

oder

function name [()] compound-command [ redirections ]

Dies wäre also vollkommen gültig und würde den Inhalt von outfile ersetzen mit dem Argument zu myfunc :

myfunc() {
    printf '%s\n' "$1"
} > outfile

Oder zum Anhängen an outfile :

myappendfunc() {
    printf '%s\n' "$1"
} >> outfile

Allerdings können Sie den Namen Ihrer Zieldatei wie folgt in eine Variable einfügen und dorthin umleiten:

fname=outfile

myfunc() { printf '%s\n' "$1"; } > "$fname"

Ich denke, es ist viel klarer, die Umleitung dort durchzuführen, wo Sie die Funktion aufrufen – genau wie in anderen Antworten empfohlen. Ich wollte nur darauf hinweisen, dass Sie können haben die Umleitung als Teil der Funktionsdeklaration.

Und das ist kein Bashismus:Die POSIX-Shell-Spezifikation erlaubt auch Umleitungen im Funktionsdefinitionsbefehl.


Führen Sie die Umleitung durch, wenn Sie die Funktion aufrufen.

#!/bin/bash
initialize() {
  echo 'initializing'
  ...
}
#call the function with the redirection you want
initialize >> your_file.log

Öffnen Sie alternativ eine Subshell in der Funktion und leiten Sie die Ausgabe der Subshell um:

#!/bin/bash
initialize() {
  (  # opening the subshell
    echo 'initializing'
    ...
  # closing and redirecting the subshell
  ) >> your_file.log
}
# call the function normally
initialize

Sie können für exec verwenden für Shell-Umleitung nicht sicher, ob es für Funktionen funktioniert

exec > output_file
function initialize {
  ...
}
initialize

Linux
  1. Eingabe-/Ausgabeumleitung in Linux/Unix

  2. Linux – Die Buffers-Spalte in der Ausgabe von Free?

  3. Lassen Sie Ls Skripte von Binärdateien in der Ausgabe unterscheiden?

  4. So hindern Sie Nicht-Root-Benutzer daran, einen Crontab-Eintrag in Linux zu erstellen

  5. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

So erstellen Sie Verzeichnisse aus einer Textdatei unter Linux

So entfernen Sie ein Passwort aus einer PDF-Datei unter Linux

So speichern Sie die Linux-Befehlsausgabe in einem Bild oder einer Textdatei

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Wie drucke ich die Linux-Befehlsausgabe in eine Datei?

Datei von windows nach linux kopieren