GNU/Linux >> Tutoriels Linux >  >> Linux

Rediriger la sortie d'un bloc fonctionnel vers un fichier sous Linux

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

Linux
  1. Comment rediriger la sortie vers un fichier et Stdout sous Linux

  2. Faire en sorte que Ls distingue les scripts des fichiers binaires dans la sortie ?

  3. Comment empêcher un utilisateur non root de créer une entrée crontab sous Linux

  4. Comment créer un fichier sous Linux à partir de la fenêtre du terminal ?

  5. pscp copier le fichier à distance de Windows vers Linux

Lire et écrire des données de n'importe où avec la redirection dans le terminal Linux

Comment enregistrer la sortie de la commande dans un fichier sous Linux

Comment créer des répertoires à partir d'un fichier texte sous Linux

Comment supprimer le mot de passe d'un fichier PDF sous Linux

Comment enregistrer la sortie de la commande Linux dans une image ou un fichier texte

Comment supprimer les caractères (^M) d'un fichier sous Linux