вывод “сценарий” к pastebin удобочитаемости

Как я вставляю вывод от script команда (машинописный текст; "сценарий человека") так, чтобы это было более читаемо?

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

Мусор (?) является отражающим из, в этом случае, gnome-terminal цвет. Да, при помощи другой оболочки, другой консоли, и т.д. возможно не генерировать тот "мусор". Вопрос состоит в том, как приятно любой добирается script управляйте, чтобы не записать их или добраться pastebin утилита (или подобный, такой как gist-paste) обработать их "приятно".

во-первых, спасибо за ответы. Во-вторых, я надеюсь, что это не пачкает воды:

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:~$ 

В то время как можно наивно ожидать, что вышеупомянутая вставка не будет иметь управляющие символы, она делает. Это вызвано тем, что сам терминал (или таким образом, я вывожу) обрабатывает/скрывает их.

Текстовые файлы очень низкого уровня, и т.д., приведенный в действие. Плюс очень детальное знание того, как эмуляция терминала работает. Немного вне меня, откровенно.

2
задан 18 June 2019 в 08:20

2 ответа

Я не думаю, что это - ответ, который Вы ищете, но он работает:

После того как Вы работали script и это создало a typescript файл, выполненный cat typescript. Все escape-последовательности используются терминалом, таким образом, вывод является цветным простым текстом. Скопируйте его вручную (использующий мышь), и это сохранит в буфер обмена как простой текст. Вставьте при необходимости.

1
ответ дан 2 December 2019 в 02:45

Я протестировал все решение, предоставленное в ссылках ниже, чтобы обработать и убрать выходной файл команды script от специальных символов.

На моей Ubuntu 16.04 только следующее решение обеспечивает удовлетворительный результат:

perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' typescript | col -b > typescript.new

Или можно передать вывод по каналу непосредственно к клиентской программе загрузки:

perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' typescript | col -b | pastebinit

Вышеупомянутая команда работает с pastebinit, так установите его:

sudo apt install pastebinit

Ссылки:


Создайте 'сценарий к pastebin' пользовательская команда - spaste

Я предложил бы создать пользовательскую команду, на основе вышеупомянутого решения. Давайте назовем это spaste.

1. Создайте исполняемый файл сценария, названный spaste, это расположено в /usr/local/bin быть доступным как команда оболочки:

sudo touch /usr/local/bin/spaste
sudo chmod +x /usr/local/bin/spaste
sudo nano /usr/local/bin/spaste
  • Скопируйте сценарий ниже. И в nano: вставьте Сдвиг Ins; сохраните CtrlO, Входят; выход 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. Объяснение:

  • Когда Вы выполняете новую команду spaste это назовет команду script и присвоит ему входные параметры пользователя. Таким образом, синтаксис вызова совпадает с командой script - посмотрите script --help или введите spaste --help для получения дополнительной информации:

    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
    
  • Когда Вы вводите exit выходить от сессии script команда, spaste обработает выходной файл script к команде pastebinit.

  • В результате pastebinit возвратит ссылку на загруженное содержание scriptвыходной файл.

  • Новая команда spaste имеет немного различных режимов, как обработать ссылку, возвращенную pastebinit. Эти режимы могли быть переключены экспортом переменной $SPASTE_MODE с различными значениями перед выполнением команды spaste:

    $ export SPASTE_MODE=
    $ spaste
    
  • Доступные режимы:

    • SPASTE_MODE=chromium - откроет возвращенную ссылку в Хроме.
    • SPASTE_MODE=firefox - откроет возвращенную ссылку в FireFox.
    • SPASTE_MODE=lynx - откроет возвращенный Lynx ссылки (терминальный браузер).
    • SPASTE_MODE=upload - просто произведет возвращенную ссылку.
    • SPASTE_MODE= - не возвратит ссылку; просто обработает содержание выходного файла.
  • Вы могли экспортировать свой любимый режим из ~/.bashrc файл, например, добавьте к его нижней части следующую строку:

    export SPASTE_MODE=firefox
    

3. Демонстрация использования:

enter image description here

2
ответ дан 2 December 2019 в 02:45

Другие вопросы по тегам:

Похожие вопросы: