Il modo che suggerisci è in realtà perfettamente valido. Il manuale di Bash fornisce la sintassi della dichiarazione di funzione come segue (sottolineatura mia):
Le funzioni sono dichiarate usando questa sintassi:
name () compound-command [ redirections ]o
function name [()] compound-command [ redirections ]
Quindi questo sarebbe perfettamente valido e sostituirebbe il contenuto di outfile
con l'argomento di myfunc
:
myfunc() {
printf '%s\n' "$1"
} > outfile
Oppure, da aggiungere a outfile
:
myappendfunc() {
printf '%s\n' "$1"
} >> outfile
Tuttavia, anche se puoi inserire il nome del tuo file di destinazione in una variabile e reindirizzare a quello, in questo modo:
fname=outfile
myfunc() { printf '%s\n' "$1"; } > "$fname"
Penso che sia molto più chiaro eseguire il reindirizzamento in cui chiami la funzione, proprio come raccomandato in altre risposte. Volevo solo farti notare che puoi avere il reindirizzamento come parte della dichiarazione della funzione.
E questo non è un bashismo:le specifiche della shell POSIX consentono anche reindirizzamenti nel comando di definizione della funzione.
Esegui il reindirizzamento quando chiami la funzione.
#!/bin/bash
initialize() {
echo 'initializing'
...
}
#call the function with the redirection you want
initialize >> your_file.log
In alternativa, apri una subshell nella funzione e reindirizza l'output della subshell:
#!/bin/bash
initialize() {
( # opening the subshell
echo 'initializing'
...
# closing and redirecting the subshell
) >> your_file.log
}
# call the function normally
initialize
Puoi usare per exec
per il reindirizzamento della shell non sono sicuro che funzionerà per le funzioni
exec > output_file
function initialize {
...
}
initialize