Existe-t-il un moyen de sauvegarder toutes les sorties du terminal dans un fichier avec une commande?
command > file.txt
history > file.txt
, J'ai besoin du texte complet du terminalQuelque chose comme terminal_text > file.txt
Vous pouvez utiliser script
. Il enregistrera essentiellement tout ce qui est imprimé sur le terminal dans cette session script
.
De man script
:
script makes a TypeScript of everything printed on your terminal.
It is useful for students who need a hardcopy record of an
interactive session as proof of an assignment, as the TypeScript file
can be printed out later with lpr(1).
Vous pouvez démarrer une session script
en tapant simplement script
dans le terminal, toutes les commandes suivantes et leurs sorties seront toutes enregistrées dans un fichier nommé TypeScript
dans le répertoire courant. Vous pouvez également enregistrer le résultat dans un autre fichier en démarrant simplement script
comme:
script output.txt
Pour vous déconnecter de la session screen
(arrêtez d'enregistrer le contenu), tapez simplement exit
.
Voici un exemple:
$ script output.txt
Script started, file is output.txt
$ ls
output.txt testfile.txt foo.txt
$ exit
exit
Script done, file is output.txt
Maintenant, si je lis le fichier:
$ cat output.txt
Script started on Mon 20 Apr 2015 08:00:14 AM BDT
$ ls
output.txt testfile.txt foo.txt
$ exit
exit
Script done on Mon 20 Apr 2015 08:00:21 AM BDT
script
propose également de nombreuses options, par exemple courir tranquillement -q
(--quiet
) sans afficher/enregistrer les messages du programme, il peut également exécuter une commande spécifique -c
(--command
) plutôt qu'une session, il propose également de nombreuses autres options. Vérifier man script
pour avoir plus d'idées.
Moi aussi, j'ai fait face au même problème et après quelques recherches, j'ai trouvé cette solution:
Ajoutez à vos .bash_aliases ceci:
# Execute "script" command just once
smart_script(){
# if there's no SCRIPT_LOG_FILE exported yet
if [ -z "$SCRIPT_LOG_FILE" ]; then
# make folder paths
logdirparent=~/Terminal_typescripts
logdirraw=raw/$(date +%F)
logdir=$logdirparent/$logdirraw
logfile=$logdir/$(date +%F_%T).$$.rawlog
# if no folder exist - make one
if [ ! -d $logdir ]; then
mkdir -p $logdir
fi
export SCRIPT_LOG_FILE=$logfile
export SCRIPT_LOG_PARENT_FOLDER=$logdirparent
# quiet output if no args are passed
if [ ! -z "$1" ]; then
script -f $logfile
else
script -f -q $logfile
fi
exit
fi
}
# Start logging into new file
alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v'
# Manually saves current log file: $ savelog logname
savelog(){
# make folder path
manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual
# if no folder exists - make one
if [ ! -d $manualdir ]; then
mkdir -p $manualdir
fi
# make log name
logname=${SCRIPT_LOG_FILE##*/}
logname=${logname%.*}
# add user logname if passed as argument
if [ ! -z $1 ]; then
logname=$logname'_'$1
fi
# make filepaths
txtfile=$manualdir/$logname'.txt'
rawfile=$manualdir/$logname'.rawlog'
# make .rawlog readable and save it to .txt file
cat $SCRIPT_LOG_FILE | Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile
# copy corresponding .rawfile
cp $SCRIPT_LOG_FILE $rawfile
printf 'Saved logs:\n '$txtfile'\n '$rawfile'\n'
}
Et à la fin de votre fichier .bashrc, ajoutez ceci:
smart_script
Après cela, la commande "script" sera exécutée une fois dans chaque session de terminal, enregistrant tout dans '~/Terminal_typescripts/raw'. Si vous le souhaitez, vous pouvez enregistrer le journal de session en cours après coup (à la fin de la session) en tapant 'savelog' ou 'savelog logname' - cela copiera le journal brut actuel dans '~/Terminal_typescripts/manual' et créera également un journal .txt lisible dans ce dossier. (Si vous oubliez de le faire, les fichiers journaux bruts seront toujours dans leur dossier, vous n'aurez qu'à les trouver.) Vous pouvez également commencer à enregistrer dans un nouveau fichier journal en tapant 'startnewlog'.
Il y aura beaucoup de fichiers journaux indésirables, mais vous pouvez nettoyer les anciens de temps en temps, donc ce n'est pas un gros problème.
(Basé sur https://answers.launchpad.net/ubuntu/+source/gnome-terminal/+question/7131 , https://askubuntu.com/a/493326/ 47379 )
Comme déjà indiqué, vous pouvez utiliser script
si vous savez au préalable que vous souhaiterez enregistrer le texte de la session. De plus, copier la sortie du terminal et la coller dans un éditeur de texte semble faire l'affaire, je crois.