Comment puis-je coller sortir de la commande script
(TypeScript; "man script") afin de la rendre plus lisible?
Script started on 2017-10-27 06:20:56-0700
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ tree
[01;34m.[00m
├── kotlin
└── [01;34mkotlinHelloWorld[00m
├── kotlinHelloWorld.iml
├── [01;34mout[00m
│ └── [01;34mproduction[00m
│ └── [01;34mkotlinHelloWorld[00m
└── [01;34msrc[00m
└── Main.kt
5 directories, 3 files
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ cat kotlinHelloWorld/src/Main.kt
class Main {
fun main(args: Array<String>) {
println("Hello, world!")
}
}]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ exit
exit
Script done on 2017-10-27 06:21:19-0700
Le charabia (?) Est le reflet de, dans ce cas, gnome-terminal
color. Oui, en utilisant un autre shell, une autre console, etc., il est possible de ne pas générer ce "charabia". La question est de savoir comment bien obtenir la commande script
afin de ne pas les enregistrer ou obtenir l'utilitaire Pastebin
(ou similaire, tel que Gist-paste
) pour les gérer "joliment".
tout d'abord, merci pour les réponses. Deuxièmement, j'espère que cela ne trouble pas les choses:
thufir@dur:~$
thufir@dur:~$ script trying_to_eliminate_control_chars.txt
Script started, file is trying_to_eliminate_control_chars.txt
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$
thufir@dur:~$ exit
exit
Script done, file is trying_to_eliminate_control_chars.txt
thufir@dur:~$
thufir@dur:~$ cat trying_to_eliminate_control_chars.txt > foo.txt
thufir@dur:~$
thufir@dur:~$ cat foo.txt
Script started on 2017-10-31 17:51:29-0700
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$
thufir@dur:~$ exit
exit
Script done on 2017-10-31 17:51:47-0700
thufir@dur:~$
thufir@dur:~$ cat trying_to_eliminate_control_chars.txt
Script started on 2017-10-31 17:51:29-0700
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$
thufir@dur:~$ exit
exit
Script done on 2017-10-31 17:51:47-0700
thufir@dur:~$
thufir@dur:~$ Pastebin foo.txt
Pastebin: command not found
thufir@dur:~$
thufir@dur:~$ pastebinit foo.txt
http://paste.ubuntu.com/25862228/
thufir@dur:~$
Bien que vous puissiez naïvement vous attendre à ce que ci-dessus ne collé pas , il . Ceci est dû au fait que le terminal lui-même (ou du moins l'inverse) les traite/les masque.
Fichiers texte de très bas niveau, etc., en cours de lecture. De plus, une connaissance très détaillée du fonctionnement de l'émulation de terminal. Un peu au-delà de moi, franchement.
J'ai testé toutes les solutions fournies dans les références ci-dessous pour traiter et nettoyer le fichier de sortie de la commande script
des caractères spéciaux.
Sur mon Ubuntu 16.04, seule la solution suivante fournit un résultat satisfaisant:
Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' TypeScript | col -b > TypeScript.new
Ou vous pouvez diriger la sortie directement vers le programme client de téléchargement:
Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' TypeScript | col -b | pastebinit
La commande ci-dessus fonctionne avec pastebinit
, donc installez-le:
Sudo apt install pastebinit
Références:
Je suggère de créer une commande personnalisée, basée sur la solution ci-dessus. Appelons-le spaste .
1. Créez un fichier script exécutable, appelé spaste
, situé dans /usr/local/bin
pour qu'il soit accessible en tant que commande Shell:
Sudo touch /usr/local/bin/spaste
Sudo chmod +x /usr/local/bin/spaste
Sudo nano /usr/local/bin/spaste
nano
: coller ShiftIns; enregistrer CtrlOEnter; sortie CtrlX.#!/bin/bash
# Name: spaste
# Location: /usr/local/bin
#export LC_ALL=C
# If the first input parameter is option - see: script --help; or type `script --help`
[[ "${1}" =~ -.* ]] && TARGET_FILE="$2" || TARGET_FILE="$1"
# If the variable $TARGET_FILE is empty, use the default output file name
[[ -z "${TARGET_FILE}" ]] && TARGET_FILE="TypeScript"
# The main function - Remove color codes, etc.
script_remove_extras() {
script "$@"
Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' "$TARGET_FILE" | col -b > "/tmp/$USER-cpaste-$TARGET_FILE.tmp"
cp "/tmp/$USER-cpaste-$TARGET_FILE.tmp" "$TARGET_FILE"
}
# Upload to 'pastebinit'
upload_pastebinit() { pastebinit < "$TARGET_FILE"; }
# GUI mode with 'chromium' or 'firefox'; CLI mode with 'lynx'; Just upload with 'pastebinit'; Just clear the outputfile
if [ "$SPASTE_MODE" == "chromium" ]; then
script_remove_extras "$@"; Nohup chromium-browser "$(upload_pastebinit)" >/dev/null 2>&1 &
Elif [ "$SPASTE_MODE" == "firefox" ]; then
script_remove_extras "$@"; Nohup firefox "$(upload_pastebinit)" >/dev/null 2>&1 &
Elif [ "$SPASTE_MODE" == "lynx" ]; then
script_remove_extras "$@"; lynx "$(upload_pastebinit)"
Elif [ "$SPASTE_MODE" == "upload" ]; then
script_remove_extras "$@"; upload_pastebinit
else
script_remove_extras "$@"
fi
2. Explication:
Lorsque vous exécutez la nouvelle commande spaste
, il appelle la commande script
et lui affecte les paramètres d'entrée de l'utilisateur. Donc, la syntaxe d'appel est la même que celle de la commande script
- voir script --help
ou tapez spaste --help
pour plus de détails:
Usage:
spaste (script) [options] [file]
Make a TypeScript of a terminal session.
Options:
-a, --append append the output
-c, --command <command> run command rather than interactive Shell
-e, --return return exit code of the child process
-f, --flush run flush after each write
--force use output file even when it is a link
-q, --quiet be quiet
-t, --timing[=<file>] output timing data to stderr (or to FILE)
-V, --version output version information and exit
-h, --help display this help and exit
Lorsque vous tapez exit
pour quitter la session de la commande script
, spaste
traite le fichier de sortie de script
dans la commande pastebinit
.
Dans le résultat, pastebinit
renverra un lien vers le contenu téléchargé du fichier de sortie de script
.
La nouvelle commande spaste
a quelques modes différents permettant de gérer le lien renvoyé par pastebinit
. Ces modes peuvent être basculés en exportant la variable $SPASTE_MODE
avec différentes valeurs avant l'exécution de la commande spaste
:
$ export SPASTE_MODE=
$ spaste
Les modes disponibles sont:
SPASTE_MODE=chromium
- ouvrira le lien renvoyé en chrome.SPASTE_MODE=firefox
- ouvrira le lien renvoyé dans FireFox.SPASTE_MODE=lynx
- ouvrira le lien retourné Lynx (navigateur de terminal).SPASTE_MODE=upload
- affichera simplement le lien renvoyé.SPASTE_MODE=
- ne renverra pas de lien; va juste traiter le contenu du fichier de sortie.Vous pouvez exporter votre mode favori à partir du fichier ~/.bashrc
, par exemple ajouter au bas la ligne suivante:
export SPASTE_MODE=firefox
3.. Démonstration d'utilisation:
Je ne pense pas que ce soit la réponse que vous cherchez, mais cela fonctionne:
Une fois que vous avez exécuté script
et créé un fichier TypeScript
, exécutez cat TypeScript
. Toutes les séquences d'échappement sont consommées par le terminal, ainsi la sortie est en texte en clair colorisé. Copiez-le manuellement (à l'aide de la souris) et il sera sauvegardé dans le presse-papiers sous forme de texte brut. Coller si nécessaire.