La méthode que vous suggérez est en fait parfaitement valable. Le manuel Bash donne la syntaxe de déclaration de fonction comme suit (c'est moi qui souligne):
Les fonctions sont déclarées en utilisant cette syntaxe :
name () compound-command [ redirections ]ou
function name [()] compound-command [ redirections ]
Ce serait donc parfaitement valide et remplacerait le contenu de outfile
avec comme argument myfunc
:
myfunc() {
printf '%s\n' "$1"
} > outfile
Ou, pour ajouter à outfile
:
myappendfunc() {
printf '%s\n' "$1"
} >> outfile
Cependant, même si vous pouvez mettre le nom de votre fichier cible dans une variable et rediriger vers celle-ci, comme ceci :
fname=outfile
myfunc() { printf '%s\n' "$1"; } > "$fname"
Je pense qu'il est beaucoup plus clair de faire la redirection là où vous appelez la fonction - tout comme recommandé dans d'autres réponses. Je voulais juste souligner que vous pouvez avoir la redirection dans le cadre de la déclaration de fonction.
Et ce n'est pas un bashisme :la spécification POSIX Shell autorise également les redirections dans la commande de définition de fonction.
Effectuez la redirection lorsque vous appelez la fonction.
#!/bin/bash
initialize() {
echo 'initializing'
...
}
#call the function with the redirection you want
initialize >> your_file.log
Vous pouvez également ouvrir un sous-shell dans la fonction et rediriger la sortie du sous-shell :
#!/bin/bash
initialize() {
( # opening the subshell
echo 'initializing'
...
# closing and redirecting the subshell
) >> your_file.log
}
# call the function normally
initialize
Vous pouvez utiliser pour exec
pour la redirection du shell, je ne sais pas si cela fonctionnera pour les fonctions
exec > output_file
function initialize {
...
}
initialize