web-dev-qa-db-fra.com

Existe-t-il un moyen simple de consigner toutes les activités d’un script Shell?

Existe-t-il un moyen simple de consigner toutes les activités d’un script Shell dans un fichier?

J'ai un script Il produit des choses comme les "instructions" echo, ainsi que d'autres sorties du programme. Je connais les commandes:

command | tee -a "$log_file"

et

command >> logifle.log

Ce que je demande, c'est s'il existe un paramètre Shell pour la journalisation, ou une commande set que je peux utiliser ou quelque chose du genre. Je ne veux pas nécessairement ajouter des dizaines de redirections ou tee aux fichiers si je ne suis pas obligé. Je veux toujours obtenir une sortie std, je veux juste qu'elle soit également enregistrée.: Wq

17
j0h

si vous exécutez normalement votre script avec foo.sh, essayez de l'exécuter (en supposant qu'il s'agisse d'un script bash) avec bash -x foo.sh. Si vous souhaitez que tout soit redirigé vers un fichier, essayez bash -x foo.sh > file.log 2>&1 (remarque: je redirige également stderr, supprimez le 2>&1 si vous ne le souhaitez pas). Si vous voulez également voir ce qui se passe, bash -x foo.sh 2>&1 | tee log.file.

17
roadmr

Il existe un moyen très simple et pratique:

Utilisation de scriptpour rendre TypeScript de la session de terminal

  1. Lancer la commande scriptname__

    Si l'argument fileest donné, par exemple script ~/tmp/output, scriptenregistre le dialogue dans ce fichier. Si aucun nom de fichier n'est fourni, le dialogue est enregistré dans le fichier TypeScriptname__

  2. Commencez votre script ou ce que vous voulez commencer

  3. Si votre script est terminé, arrêtez scriptvia Ctrl-D

  4. Vérifiez la sortie dans le fichier de sortie par défaut TypeScriptname__


Pour lancer votre commande en une étape avec scriptname__, utilisez le paramètre -c

-c COMMAND
    Run the COMMAND rather than an interactive 
    Shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

L’utilisation de scriptdans votre script n’a aucun sens car scriptcommande le shell ou démarre un nouveau shell.

Si la variable Shell existe, le shell créé par le script sera celui-ci. Si Shell n'est pas défini, le Bourne Shell est utilisé. (La plupart des coquillages définissent cette variable automatiquement).

19
A.B.