GNU/Linux >> Znalost Linux >  >> Linux

Přesměrování výstupu z funkčního bloku do souboru v Linuxu

Způsob, který navrhujete, je ve skutečnosti dokonale platný. Manuál Bash uvádí syntaxi deklarace funkce následovně (důraz):

Funkce jsou deklarovány pomocí této syntaxe:

name () compound-command [ redirections ]

nebo

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

Takže by to bylo dokonale platné a nahradilo by to obsah outfile s argumentem myfunc :

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

Nebo pro připojení k outfile :

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

I když však můžete název cílového souboru vložit do proměnné a přesměrovat se na ni, například takto:

fname=outfile

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

Myslím, že je mnohem jasnější provést přesměrování tam, kde funkci voláte – stejně jako doporučeno v jiných odpovědích. Jen jsem chtěl upozornit, že můžete mít přesměrování jako součást deklarace funkce.

A to není bashismus:specifikace POSIX Shell také umožňuje přesměrování v příkazu definice funkce.


Proveďte přesměrování při volání funkce.

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

Případně otevřete subshell ve funkci a přesměrujte výstup subshell:

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

Můžete použít pro exec pro přesměrování shellu si nejsem jistý, zda to bude fungovat pro funkce

exec > output_file
function initialize {
  ...
}
initialize

Linux
  1. Čtěte a zapisujte data odkudkoli s přesměrováním v terminálu Linux

  2. Jak uložit výstup příkazu do souboru v Linuxu

  3. Přesměrování vstupu/výstupu v Linuxu/Unixu

  1. Linux – sloupec Buffers ve výstupu zdarma?

  2. Jak vytvořit soubor v Linuxu z okna terminálu?

  3. Je fopen() v Linuxu bezpečná funkce vláken?

  1. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  2. Jak vytisknout výstup příkazu Linuxu do souboru?

  3. Jak stáhnout soubor z URL v Linuxu