GNU/Linux >> Tutoriels Linux >  >> Linux

Script bash :utilisation de la commande de script d'un script bash pour la journalisation d'une session

Votre script shell ne s'est pas terminé. Il est toujours en cours d'exécution. Vous recevez une invite car script engendre une nouvelle coquille. l'invite que vous voyez est l'invite du shell généré.

Le cas d'utilisation normal pour script est quelque chose comme ça :

  1. début script . cela génère un nouveau shell.
  2. exécuter des commandes dans le nouveau shell.
  3. quittez le shell et passez au shell précédent
  4. examiner le fichier journal créé par script

Donc en gros script fonctionne comme prévu. Vous devrez trouver un autre moyen d'obtenir ce que vous voulez.

Vous pouvez enregistrer l'exécution de votre script comme ceci :

#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO

Explication :

  • exec > logfile 2>&1 redirige stdout et stderr vers le fichier journal
  • set -x fait en sorte que bash imprime chaque commande avant de l'exécuter

Exemple :

$ ./foo.sh
  # (no output here because everything goes to logfile)
$ cat logfile 
+ FOO=BAR
+ echo BAR
BAR

L'inconvénient de cette méthode est que le script n'imprime aucune sortie visible par les humains. Tout va dans le fichier journal.

Sinon, vous pouvez le faire comme ceci :

#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO

Exécutez ensuite comme ceci :

$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript

maintenant la sortie est directement visible et également enregistrée dans le fichier journal (le nom par défaut du fichier journal est typescript )

$ cat typescript 
Script started on Mi 18 Mai 2011 01:05:29 CEST
+ FOO=BAR
+ echo BAR
BAR

Script done on Mi 18 Mai 2011 01:05:29 CEST

Votre script bash est toujours en cours d'exécution, mais il a généré un nouveau shell interactif. Le script bash attend script à terminer, ce qui ne se produira que lorsque le shell interactif sera terminé (soit en étant tué, soit par l'utilisateur tapant exit ).

Pour faire la commande après script être connecté par script , faites comme ceci :

script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'

Cependant, script cessera de fonctionner après avoir exécuté cette commande.

Pour exécuter plusieurs commandes dans script , placez ces commandes dans un autre script bash et spécifiez ce script bash comme commande à exécuter sur le -c option.


Linux
  1. Ssh - Script Shell pour se connecter à un serveur Ssh ?

  2. Ouvrir Vim depuis un script shell Bash

  3. démarrer apachectl à partir de bash

  4. Exécutez un script shell à partir de la commande docker-compose, à l'intérieur du conteneur

  5. Comment puis-je trouver de l'aide pour la commande de point `.` dans * nix ?

Comprendre facilement les commandes Shell à l'aide du script "Explain Shell" sous Linux

Utilisation de Bash pour l'automatisation

Conseils d'utilisation de tmux

Utilisation de la commande Bash printf pour imprimer des sorties formatées

Utilisation de la fonctionnalité d'historique sur Bash Shell sur le serveur Ubuntu 16.04 LTS

Comment exécuter une commande dans un script shell ?