Как я вставляю вывод от 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:~$
В то время как можно наивно ожидать, что вышеупомянутая вставка не будет иметь управляющие символы, она делает. Это вызвано тем, что сам терминал (или таким образом, я вывожу) обрабатывает/скрывает их.
Текстовые файлы очень низкого уровня, и т.д., приведенный в действие. Плюс очень детальное знание того, как эмуляция терминала работает. Немного вне меня, откровенно.
Я не думаю, что это - ответ, который Вы ищете, но он работает:
После того как Вы работали script
и это создало a typescript
файл, выполненный cat typescript
. Все escape-последовательности используются терминалом, таким образом, вывод является цветным простым текстом. Скопируйте его вручную (использующий мышь), и это сохранит в буфер обмена как простой текст. Вставьте при необходимости.
Я протестировал все решение, предоставленное в ссылках ниже, чтобы обработать и убрать выходной файл команды 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
Ссылки:
Я предложил бы создать пользовательскую команду, на основе вышеупомянутого решения. Давайте назовем это 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. Демонстрация использования: