Вывести "скрипт" для удобочитаемости вставки
Как вставить вывод из script команда (typcript; "man 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 ответа
Я протестировал все решения, представленные в ссылках ниже, для обработки и очистки выходного файла команды 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
Рекомендации:
- Основной источник ответа
- Удалить цветовые коды (специальные символы) с помощью sed
- Как удалить цветовые коды из стандартного вывода и передать в файл и стандартный вывод
- Удаление цветовых кодов ANSI из текстового потока
- Удаление контрольных символов (включая коды / цвета консоли) из вывода скрипта
- Как установить локаль в текущей сессии терминала?
Создайте пользовательскую команду "скрипт для вставки" - 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: вставить Shift Ins; сохранить Ctrl O Enter; выйти из 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`
[[ "${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- откроет возвращенную ссылку в Chromium.SPASTE_MODE=firefox- откроет возвращенную ссылку в FireFox.SPASTE_MODE=lynx- откроет возвращенную ссылку Lynx (терминал браузера).SPASTE_MODE=upload- просто выведет возвращенную ссылку.SPASTE_MODE=- не вернет ссылку; просто обработает содержимое выходного файла.
Вы можете экспортировать свой любимый режим из
~/.bashrcНапример, добавьте в конец файла следующую строку:export SPASTE_MODE=firefox
3. Демонстрация использования:
Я не думаю, что это ответ, который вы ищете, но он работает:
Как только вы запустите script и он создал typescript файл, запустить cat typescript, Все escape-последовательности потребляются терминалом, поэтому на выходе отображается цветной текст. Скопируйте его вручную (с помощью мыши), и он сохранится в буфер обмена в виде обычного текста. Вставьте, где это необходимо.
