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?
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:
script -a /path/to/single_log_file
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
.
À 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.