Вывести "скрипт" для удобочитаемости вставки
Как вставить вывод из 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-последовательности потребляются терминалом, поэтому на выходе отображается цветной текст. Скопируйте его вручную (с помощью мыши), и он сохранится в буфер обмена в виде обычного текста. Вставьте, где это необходимо.