Eu testei toda a solução, fornecida nas referências abaixo, para processar e limpar o arquivo de saída do comando script
de caracteres especiais.
No meu Ubuntu 16.04, apenas a seguinte solução fornece um resultado satisfatório:
perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' typescript | col -b > typescript.new
Ou você pode canalizar a saída diretamente para o programa cliente de upload:
perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' typescript | col -b | pastebinit
O comando acima funciona com pastebinit
, então instale-o:
sudo apt install pastebinit
Referências:
- A principal fonte da resposta
- Remover códigos de cores (caracteres especiais) com sed
- Como remover códigos de cores de stdout e pipe para arquivo e stdout
- Removendo os códigos de cores ANSI do fluxo de texto
- Removendo caracteres de controle (incluindo códigos de console / colors) da saída do script
- Como definir localidade na sessão do terminal atual?
Criar um comando personalizado 'script para pastebin' - spaste
Sugiro criar um comando personalizado, com base na solução acima. Vamos citar spaste .
1. Crie um arquivo de script executável chamado spaste
, localizado em /usr/local/bin
para ser acessível como comando shell:
sudo touch /usr/local/bin/spaste
sudo chmod +x /usr/local/bin/spaste
sudo nano /usr/local/bin/spaste
- Copie o script abaixo. E em
nano
: colar Shift Ins ; save Ctrl O Enter ; sair Ctrl X .
#!/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'
[[ "" =~ -.* ]] && TARGET_FILE="" || TARGET_FILE=""
# 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. Explicação:
-
Quando você executar o novo comando
spaste
, ele chamará o comandoscript
e atribuirá a ele os parâmetros de entrada do usuário. Portanto, a sintaxe da chamada é igual ao comandoscript
- consultescript --help
ou digitespaste --help
para obter mais detalhes: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
-
Quando você digitar
exit
para sair da sessão do comandoscript
,spaste
processará o arquivo de saída descript
com o comandopastebinit
. -
Em resultado,
pastebinit
retornará um link para o conteúdo carregado do arquivo de saída descript
. -
O novo comando
spaste
tem poucos modos diferentes de como lidar com o link retornado porpastebinit
. Esses modos podem ser alternados exportando a variável$SPASTE_MODE
com valores diferentes antes da execução do comandospaste
:$ export SPASTE_MODE= $ spaste
-
Os modos disponíveis são:
-
SPASTE_MODE=chromium
- abrirá o link retornado no Chromium. -
SPASTE_MODE=firefox
- abrirá o link retornado no FireFox. -
SPASTE_MODE=lynx
- abrirá o link retornado Lynx (navegador do terminal). -
SPASTE_MODE=upload
- apenas produzirá o link retornado. -
SPASTE_MODE=
- não retornará um link; apenas processará o conteúdo do arquivo de saída.
-
-
Você pode exportar o seu modo favorito do arquivo
~/.bashrc
, por exemplo, adicionar ao final a seguinte linha:export SPASTE_MODE=firefox
3. Demonstração de uso: