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