web-dev-qa-db-fra.com

Comment enregistrer automatiquement toutes vos sessions de terminal avec l'utilitaire de script

Ce que je veux réaliser, c'est pouvoir enregistrer mes sessions de terminal pour déposer automatiquement chaque fois que j'utilise Yakuake/Konsole.

Il est facile d'atteindre si au début de ma session, je fais:

script -f /home/$USER/bin/Shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_Shell.log

Mais je veux exécuter automatiquement ce qui précède chaque fois que je démarre Yakuake ou ouvre un nouvel onglet.

L'utilisation de .bstrucc ne fonctionne pas car elle crée une boucle sans fin, car "script" ouvre une nouvelle session, qui se lit à son tour et commence un autre "script" et ainsi de suite.

Donc, probablement, j'ai besoin de script Yakuake/Konsole d'une manière ou d'une autre pour exécuter "script" une fois comme un nouvel onglet est ouvert. La question est de savoir comment?

31
Stan

Si quelqu'un veut enregistrer automatiquement ses sessions de terminal - y compris les sessions SSH (!) - Utilisation de l'utilitaire script, voici comment.

Ajoutez la ligne suivante à la fin de .bashrc Dans votre répertoire personnel ou autrement /etc/bash.bashrc Si vous voulez seulement enregistrer les sessions de tous les utilisateurs. Nous testons le processus parent de Shell n'étant pas script puis exécutez script.

Pour Linux:

test "$(ps -ocommand= -p $PPID | awk '{print $1}')" == 'script' || (script -f $HOME/$(date +"%d-%b-%y_%H-%M-%S")_Shell.log)

Pour BSD et MacOS, Change script -f à script -F:

test "$(ps -ocommand= -p $PPID | awk '{print $1}')" == 'script' || (script -F $HOME/$(date +"%d-%b-%y_%H-%M-%S")_Shell.log)

C'est tout!

Maintenant, lorsque vous ouvrez un nouveau terminal, vous verrez:

Script started, file is /home/username/file_name.log

script _ _ eccrira vos sessions dans un fichier de votre annuaire de domicile les nommant quelque chose comme 30-Nov-11_00-11-12_Shell.log par conséquent.

Plus de personnalisation:

  • Vous pouvez ajouter vos sessions à un grand fichier plutôt que de créer une nouvelle pour chaque session avec script -a /path/to/single_log_file
  • Vous pouvez ajuster où les fichiers sont écrits en changeant le chemin après script -f (Linux) ou script -F (BSD et MacOS)

Cette réponse suppose que vous avez script installé, bien sûr. Sur les distributions basées sur Debian, script fait partie du package bsdutils.

27
Stan

À la place de:

test "$(ps -ocommand= -p $PPID | awk '{print $1}')" == 'script' ||

J'utiliserais:

grep -qx "$PPID" <(pgrep -x "script") ||

Les doubles citations ne sont pas nécessaires dans ce cas, mais j'ai tendance à les utiliser de toute façon comme une pratique standard. Je recommande définitivement d'utiliser le commutateur "X" sur le GREP et le PGREP, pour éviter une correspondance rare mais problématique avec des sous-chaînes.

2
William Dye