# "logguer" ces différents shells

**URL:** <https://www.debian-fr.org/t/logguer-ces-differents-shells/64035>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035 "2016-02-21T20:58:25Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![simont\_belmont](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/53a042/32.png) [@simont\_belmont](https://www.debian-fr.org/u/simont_belmont)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/1 "2016-02-21T20:58:25Z")

</div>

bonjours à tous/toutes,

je souhaiterais tracer mes activités sur la console dans un fichier texte tout simple.  
1 fichier par ouverture de consoles nommé “utilisateur\_shell1\*\*\_date.log”

afin de pouvoir analyser mes erreurs par la suite, ne pas perde des commandes passé, un peu à la façon de “showterm” ou “asciinema” sauf que je ne cherche pas à faire de diffusion sur le web.

j’ai bien essayé de rajouter un petit script dan mon fichier .bashrc contenant un “exec”, un "tee"  
mais rien à faire.

j’ai bien testé “ttyrec”/“ttyplay”, mais les fichier de logs ne sont pas lisible hors “ttyplay” et l’utilisation de la commande ne me convient pas.  
exemple :

```auto
belmont@debian:/usr/log$ cat test_tty_rec_3
�0MTZpmtoto
Chargement des variables d'envirronement [OK]
belmont@debian:/usr/log$ �0MTce�0MT�c�0MT�O	h�0MT�a
 �0MT��"�0MTը o�0MT
                t�0MT�e�0MT:|s�0MTU�t�0MT�� �0MTg�
                                                         t�0MT1
t�0MT�*y�0MTlt�0MT��i�0MTsn
m�0MT�v
F e�0MT�"�0MT%L
test ttytime
elmont@debian:/usr/log$ �0MT�4ttytime�0MT�q
6belmont@debian:/usr/log$ �0MT+�ttytime�0MT��ttytime�0MT��:^C
 �0MT�f/usr/log/test_tty_rec_3�0MT40MT��
�0MTU 18�0MT:	�0MT�/usr/log/test_tty_rec_3�0MT7
0MTC6belmont@debian:/usr/log$ �0MT\ttytime /usr/log/test_tty_rec_3�0MT�
     20�0MT�	�0MT�/usr/log/test_tty_rec_3�0MTK
�0MT.
     6belmont@debian:/usr/log$ �0MTU�	ttytime /usr/log/test_tty_rec_3�0MT�8
                                                                              
�0MT�C
           22�0MT�D
                   	�0MTAE
                              /usr/log/test_tty_rec_3�0MT�E
                                                            
�0MT�I
      6belmont@debian:/usr/log$ �0MT٣
                                    ttytime /usr/log/test_tty_rec_3�0MT
/usr/log/test_tty_rec_3�0MTBi
6belmont@debian:/usr/log$ �0MT
                               e�0MT��x�0MT��i�0MT��t�0MTE
exit

```

j’aimerais juste un fichier de log tout simple ou je pourrais faire des grep si besoin …

connaissez-vous un moyen simple d’arriver à ce résultats ?

---

<div class="post-metadata">

**Author:** ![haleth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/ecc23a/32.png) [@haleth](https://www.debian-fr.org/u/haleth)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/2 "2016-02-21T20:58:25Z")

</div>

J’utilise ça:

```auto
# cat /etc/bash.bashrc
PROMPT_COMMAND='history -a >(tee -a ~/.bash_history | logger -t "$USER[$$] $SSH_CONNECTION")'
```

Les commandes sont loggés dans syslog (après l’execution, m’enfin)

---

<div class="post-metadata">

**Author:** ![simont\_belmont](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/53a042/32.png) [@simont\_belmont](https://www.debian-fr.org/u/simont_belmont)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/3 "2016-02-21T20:58:27Z")

</div>

t’as façon de faire est intéressante mais ce n’est pas la type de fonctionnement que je cherche.

en faisant l’essai voila ce que j’obtiens :

commande :

```auto
belmont@debian:~$ history | logger -t toto
```

contenu de la syslog :

```auto
Oct 26 20:36:04 debian toto: 192 echo "toto"
Oct 26 20:36:04 debian toto: 193 ls
Oct 26 20:36:04 debian toto: 194 cd ..
Oct 26 20:36:04 debian toto: 195 ls
Oct 26 20:36:04 debian toto: 196 cd
Oct 26 20:36:04 debian toto: 197 ls
Oct 26 20:36:04 debian toto: 198 exit
Oct 26 20:36:04 debian toto: 199 lsr
Oct 26 20:36:04 debian toto: 200 cd
```

sa sauvegarde effectivement les commandes passées mais pas leur retour

ce que je cherche est un fonctionnement plus proche de “asciinema” ou “showterm” mais dans un simple fichier qui ne serait uploadé nul part et que je pourrais relire à ma guise.

---

<div class="post-metadata">

**Author:** ![haleth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/ecc23a/32.png) [@haleth](https://www.debian-fr.org/u/haleth)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/4 "2016-02-21T20:58:27Z")

</div>

Owh, au temps pour moi

---

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/5 "2016-02-21T20:58:28Z")

</div>

script output.log (débute l’enregistrement)  
exit (arrêt script et écriture final sur output.log)

cat output.log (affichage du log enregistrer)

script output.log -c ta\_commande (lance ton logiciel et garde les logs via script)

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/6 "2016-02-21T20:58:29Z")

</div>

Je pense que le «tee» est la bonne solution. Quels ont été tes tentatives ?

---

<div class="post-metadata">

**Author:** ![simont\_belmont](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/53a042/32.png) [@simont\_belmont](https://www.debian-fr.org/u/simont_belmont)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/7 "2016-02-21T20:58:32Z")

</div>

@ kripteks : 😉 merci quand même

@ Mimoza : pourquoi pas mais je ne vois pas comment le mettre en oeuvre

après quelques essai avec la commande “script” voila ce que j’ai fait :

dans mon fichier bashrc j’ai rajouté ceci à la fin :

```auto
# 25/10/2014 : ajout gestion variables d'environnement dans un fichier separé
if [-f ~/.start]; then
  . ~/.start
  CR_CHARGEMENT_START=$?
  if [${CR_CHARGEMENT_START} -eq 0]; then
    echo "Chargement des variables d'environnement [OK]"
  else
    echo "Chargement des variables d'environnement [KO]"
  fi
fi
```

contenu du script .start

```auto
#!/usr/bin/bash
#---------------------------------------------------------------
# .start
#---------------------------------------------------------------
# Fichier contenant les variables d'environnement utilisateur
# date : 25/10/2014
#---------------------------------------------------------------

REPLOG="/usr/log"
TERMINAL_NUMBER=$(tty | cut -d'/' -f 4)
DATE_CONNEXION=$(date +%d%m%y)
FICLOGTERMINAL=${DATE_CONNEXION}_${USERNAME}_term${TERMINAL_NUMBER}.log

if [-d ${REPLOG}]; then
  script -c ${REPLOG}/${FICLOGTERMINAL}
fi
```

Mais cela ne fonctionne pas.  
à l’ouverture d’un nouveau terminal voila ce qui ce passe :

`Le script a débuté, le fichier est typescript
bash: /usr/log/261014_belmont_term2.log: Aucun fichier ou dossier de ce type
Script terminé, le fichier est typescript
Chargement des variables d'envirronement [OK]
belmont@debian:~$
`

si je refait la même chose sans l’option -c =\> script ${REPLOG}/${FICLOGTERMINAL}  
le nouveau terminal boucle en faisant un appel recursif à bash

```auto

Le script a débuté, le fichier est /usr/log/271014_belmont_term0.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term2.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term3.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term4.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term5.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term6.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term7.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term8.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term9.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term10.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term11.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term12.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term13.log
```

jusqu’à ce que je l’interrompe avec un ctrl+c

---

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/8 "2016-02-21T20:58:32Z")

</div>

Suivit de “script” il faut “le nom du fichier log” sinon c’est automatiquement sur le fichier “typescript” qu’il écrit.  
Donc: script ton.log -c ta\_commande

Il te manque aussi, “exit” qui termine l’écriture du log et qui arrête “script”.

Si tu fais: script ton.log -c ta\_commande  
À la fermeture/terminaison de la commande, “script” s’auto-termine et affiche le message de fin.

Mais si tu ouvres tes commandes manuellement après avoir lancer un “script ton.log”, il faudra faire “exit” soit même pour terminer “script” et afficher le message de fin.

---

<div class="post-metadata">

**Author:** ![simont\_belmont](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/53a042/32.png) [@simont\_belmont](https://www.debian-fr.org/u/simont_belmont)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/9 "2016-02-21T20:58:52Z")

</div>

le problème c’est que je veu mettre plus qu’une commande dans mon fichier de log …

script :

```auto
#!/bin/bash
  script /usr/log/test
```

resultat (ouverture d’un nouvel onglet du terminal) :

```auto
Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
^Cbelmont@debian:~$ 
```

je ne comprends pas pourquoi le script boucle ![:confusion-helpsos:](https://www.debian-fr.org/uploads/default/original/1X/4030a9a60185376a7393a78002ce3ec0176e975e.gif "Help! SOS!")  
surtout que je n’ai de boucle nul part  
je suis obligé de faire ctrl+c pour sortir de la boucle avant de pouvoir utiliser le terminal  
un fois le ctrl+c passé le fichier de log ce rempli bien …

je ne comprend pas ce qui m’échappe

---

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 8:58 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/10 "2016-02-21T20:58:53Z")

</div>

Je sais pas pourquoi tu as une boucle.

Pour le moment, essaye de mettre un if:  
if(si script log n’est pas déjà lancé)  
{  
script ton.log  
}

---

<div class="post-metadata">

**Author:** ![simont\_belmont](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/53a042/32.png) [@simont\_belmont](https://www.debian-fr.org/u/simont_belmont)\
**Post date:** [Février 21, 2016, 8:59 UTC](https://www.debian-fr.org/t/logguer-ces-differents-shells/64035/11 "2016-02-21T20:59:04Z")

</div>

hello kripteks,

j’ai eu la même idée que toi mais ça ce comporte un peu bizarrement

```auto
#!/bin/ksh
#---------------------------------------------------------------
# .start
#---------------------------------------------------------------
# Fichier contenant les variables d'environnement utilisateur
# date : 25/10/2014
#---------------------------------------------------------------

#---------------------------------------------------------------
# Permet de tracer la nouvelle session ouverte
#---------------------------------------------------------------
FICHIER="/usr/log/buildlog_$(date +%d%m%y_%H%M%S_%s).log"

if [-f $FICHIER]; then
  echo "fichier deja présent"
else
  touch $FICHIER
  #script -ac $(basename $SHELL) ${FICHIER};exit
  script -ac ksh ${FICHIER}
fi
```

En utilisant : script -ac ksh ${FICHIER},  
=\> fonctionne mais ça empêche de changement de shell (dans la meme fenetre) sans quitter le shell courant donc en perdant l’utilisation de la log pour le nouveau shell

En utilisant : script -ac $(basename $SHELL) ${FICHIER};exit  
ou script -ac $(basename $SHELL) ${FICHIER}  
=\> fonctionne en lançant le shell par defaut du /etc/profile mais ré-ouvre un autre shell par defaut par deçu le shell demandé il faut donc faire 2 ou 3 fois exit avant de retomber sur ksh par exemple.

De plus la commande script est parasitée si j’ouvre un vi … comme indiqué dans le man …

Je comprend toujours pas pourquoi ça boucle,peut etre un “path” moisi, je vais peut être commencer par analyser de ce coté la.  
Je commence a me dire que c’était peut être un peut trop en vouloir trop vite je vais peut etre me concentrer sur des trucs moins tordu avant de reprendre ça

En tous cas merci pour l’aide apportée. Je passe le sujet en résolut mais je le rouvrirai peut être un jour, si une idée lumineuse me vient pour contourner le problème.
