2011-09-25 2 views
1

Je suis un débutant à unix scripting, je veux faire suite et je n'ai pas la moindre idée de la façon de procéder.clé de connexion unix

Je veux enregistrer l'entrée et la sortie de certains ensembles de commandes, donnés sur le terminal, dans un fichier de trace. Je devrais pouvoir l'allumer et l'éteindre.

E.g.

switch trace on 

user:echo Hello World 

user:Hello World 

switch trace off 

Puis le fichier journal de suivi, par ex. trace.log, il est contenu doit être

echo Hello World 

Hello World 

Une chose que je peux penser à faire est d'utiliser set -x, rediriger sa sortie vers un certain fichier, mais n'a pas pu trouver un moyen de le faire. J'ai fait man set, ou man -x mais je n'ai trouvé aucune entrée. Peut-être que je suis trop naïf, mais quelques conseils seront très utiles. J'utilise shell bash.

+1

Vérifiez la commande 'script'. –

Répondre

3

Voir script (1), "make tapuscrit de session de terminal". Pour commencer une nouvelle transcription dans le fichier xyz: script xyz. Pour ajouter à une transcription existante dans le fichier xyz: script -a xyz.

Il y aura quelques lignes aériennes, comme Script started on ... et Script done on ... que vous pouvez utiliser awk ou sed pour filtrer sur l'impression. L'interrupteur -t permet une lecture en temps réel.

Je pense qu'il pourrait y avoir eu une récente question sur la façon d'afficher une transcription en less, et bien que je ne le trouve pas, this question et this one adresse certains des mêmes problèmes de l'affichage d'un fichier qui contient des caractères de contrôle. (Relevés de notes Captured contiennent souvent des séquences de contrôle ANSI et contiennent généralement retours ainsi que linefeeds.)

Mise à jour 1 Un programme Perl script-declutter est disponible pour supprimer des caractères spéciaux des journaux de script.
Le programme contient environ 45 lignes de code trouvées près du milieu du lien. Enregistrez ces lignes de code dans un fichier appelé script-declutter, dans un sous-répertoire qui se trouve sur votre chemin (par exemple, $HOME/bin si c'est sur votre chemin de recherche, sinon (par exemple) /usr/local/bin) et rendre le fichier exécutable. Après cela, une commande comme

script-declutter typescript > out 

enlèvera plupart des caractères spéciaux à partir du fichier typescript, tout en dirigeant le résultat de déposer out.

+0

Merci! Juste une autre question naïve, pourquoi je ne pouvais pas trouver l'entrée de l'homme pour -x ou + x – SnoopyMe

+0

Manque de persistance? :) Après avoir entré 'man set' (ou' man builtins' ou 'man' pour n'importe laquelle des commandes intégrées de bash), cherchez' xtrace' (rappelez-vous que 'set -o xtrace' est synonyme de' set -x ') puis regardez environ 20 lignes plus loin pour les documents' set -x'. Notez que 'set -x' active l'écho des commandes, ce qui est utile pour le débogage des scripts mais n'affecte pas la sortie de la commande ou l'enregistrement. –

+0

Mon bash n'a pas d'entrée man pour set ou xtrace, et pourtant set -x marche ...? – SnoopyMe