web-dev-qa-db-fra.com

sortie "script" pour lisibilité Pastebin

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.

2
Thufir

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:


Créer une commande personnalisée 'script to Pastebin' - spaste

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
  • Copiez le script ci-dessous. Et dans 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:

enter image description here

2
pa4080

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.

1
wjandrea