La forma en que sugieres es perfectamente válida. El manual de Bash proporciona la sintaxis de declaración de función de la siguiente manera (énfasis mío):
Las funciones se declaran usando esta sintaxis:
name () compound-command [ redirections ]
o
function name [()] compound-command [ redirections ]
Entonces esto sería perfectamente válido y reemplazaría el contenido de outfile
con el argumento de myfunc
:
myfunc() {
printf '%s\n' "$1"
} > outfile
O, para agregar a outfile
:
myappendfunc() {
printf '%s\n' "$1"
} >> outfile
Sin embargo, aunque puede poner el nombre de su archivo de destino en una variable y redirigir a eso, así:
fname=outfile
myfunc() { printf '%s\n' "$1"; } > "$fname"
Creo que es mucho más claro hacer la redirección donde llamas a la función, tal como se recomienda en otras respuestas. Solo quería señalar que usted puede tener la redirección como parte de la declaración de la función.
Y esto no es un bashism:la especificación POSIX Shell también permite redirecciones en el comando de definición de funciones.
Realice la redirección cuando llame a la función.
#!/bin/bash
initialize() {
echo 'initializing'
...
}
#call the function with the redirection you want
initialize >> your_file.log
Alternativamente, abra una subcapa en la función y redirija la salida de la subcapa:
#!/bin/bash
initialize() {
( # opening the subshell
echo 'initializing'
...
# closing and redirecting the subshell
) >> your_file.log
}
# call the function normally
initialize
Puedes usar para exec
para la redirección de shell, no estoy seguro de si funcionará para las funciones
exec > output_file
function initialize {
...
}
initialize