Форум программистов, компьютерный форум, киберфорум
nezabudka
Войти
Регистрация
Восстановить пароль
Карта форума Блоги Сообщество Поиск Заказать работу  
Заберите себе весь мир, оставте мне один компьютер.
Рейтинг: 1.00. Голосов: 1.

КОНСОЛЬНЫЕ ХИТРОСТИ В BASH

Запись от nezabudka размещена 29.03.2016 в 21:03
Обновил(-а) nezabudka 23.10.2018 в 10:24

Запись и воспроизведение в консоли.
Все привыкли пользоватся скриншотами и записью видео
с экрана. Я даже встречала мануалы как делать скрины в голой консоли.
Хочу поделится с вами интересным способом как делать "настоящую"
видеозапись с консоли без лишних движений. Выполните для примера следующие команды
в терминале:
Bash
1
2
3
4
5
6
7
script -t 2> timing.log -a output.session
pwd
cd /
pwd
cd -
pwd
exit
После команды exit запись с терминала прервется и следующей
командой проиграем наш "видео ролик"
Bash
1
scriptreplay timing.log output.session
Замечу что это не сработает в csh. Файлы можно передавать для
просмотра "третьим" лицам. Ну и на последок можно глянуть ман
страницу
Bash
1
2
man script
man scriptreplay
Между прочим это видео состоящее из двух файликов можно
легко передавать на форуме, а еще лучше сделать один перенаправив
следующие стандартные выводы в новый файл.
Что бы вывести список вводимых команд без проигрывания всех действий
с установленными временными интервалами достаточно ввести команду:
Bash
1
awk '/@/' output.session
А что бы получить полный список вводимых команд и ответы интерпретатора:
Bash
1
awk '/./' output.session
Пояснение к этому смотрите в коментариях.

Есть еще тулза на питоне можно смотреть видео в браузере
Bash
1
2
3
4
5
pip3 install --user termtosvg
$termtosvg
...
exit
xdg-open <file.svg>
Размещено в Без категории
Показов 3553 Комментарии 8
Всего комментариев 8
Комментарии
  1. Старый комментарий
    Аватар для tezaurismosis
    nezabudka, очень интересная вещь, положил в закладки.
    Единственное, что расстраивает - получившийся ролик не так просто читать вручную - там много мусора, а если включить что-нибудь, занимающее всё видимое пространство (например vim), и полистать, мусора становится ну очень много. Я конечно понимаю, что это всё сделано для возможности последующего проигрывания, но хотелось бы иметь возможность записывать только введённые команды.

    В общем, спасибо за информацию, полезная штука
    Запись от tezaurismosis размещена 30.03.2016 в 18:24 tezaurismosis вне форума
  2. Старый комментарий
    Аватар для nezabudka
    tezaurismosis .Попробуйте вот так
    Bash
    1
    
    awk '/[nez@rox]/' output.session
    Где [nez@rox] это мое приглашение командной строки, на этом месте должно быть ваше.
    И еще если например я хочу получить в выводе только вводимые команды, а не вместе с
    возвращаемыми значениями то я ввожу фильтр без квадратных скобок
    Bash
    1
    
    awk '/nez@rox/' output.session
    В fedora23 по умолчанию идет приглашение в квадратных скобках, а в дебиан без, но в конце с
    дополнением ":~$". Так вот в обеих случаеях в фильтре должны быть только логин@машина и
    в зависимости от требуемого вывода наличие квадратных скобок.
    Можно упростить, у меня работает даже так '/nez/' и '/[nez]/' и так '/rox/' и '/[rox]/' и даже
    выводит участки кода выполненные из под root
    Можно включать запись, устанавливать приложение, настраивать и таким вот образом по окончании перенаправлять
    все в фойл, фактически выкинув все лишние интервалы времени и можно делится с форумчанами. Спасибо за
    хорошую подачу, теперь это действительно стало удобно.
    Обнаружила такой фильтр методом тыка, сама объяснить как он работает не могу, буду рада
    любым замечаниям по этому поводу.
    Запись от nezabudka размещена 31.03.2016 в 09:22 nezabudka вне форума
    Обновил(-а) nezabudka 31.03.2016 в 10:22
  3. Старый комментарий
    Аватар для nezabudka
    Спасибо marinero за развернутые ответы, привожу здесь некоторые выдержки с его согласия.
    Последние строчки не относятся на прямую к теме но думаю они здесь будут совсем не лишние:
    Цитата:
    Сообщение от Marinero
    Цитата:
    Сообщение от nezabudka
    наличие скобок в фильтре добавляет в выводе дополнительные строки
    к которым казалось бы это не должно иметь ни какогод отношения.
    Дело в том, что awk расценивает то что между «/»«/» как регулярное выражение. А в синтаксисе регулярных выражений «[]»(квадратные скобки) обозначают класс символов. Тогда Ваше выражение /[nez@rox]/ будет истинно при нахождении в строке любого(одного!) символа из перечисленных(n, e, z, @, r, o, или x), другими словами "любой из символов класса"
    Цитата:
    Сообщение от nezabudka
    Для меня
    это такая же загадка как например фильтр uniqe без сортировки: awk '!t[$0]++'
    Для того чтобы понимать, достаточно помнить что для awk (и многих других, python например) «0» == «false», a «не 0» == «true». Данное выражение это упрощенный инкремент(increment), т.е. следующие выражения абсолютно равноценны
    Код:
    var = var + 1
    var += 1
    var++
    за исключением того что последнее еще и возвращает значение var(в виде «var++» сначала возвращает, потом увеличивает на 1, а в виде «++var» — сначала добавляет 1, потом возвращает.)
    Таким образом выражение t[$0]++ возвращает значение элемента ассоциативного массива t с индексом == очередной строке и добавляет ему 1. Если строка не встречалась => 0 (значение любой неинициализированной переменной в bash == 0), т.е. «false», если встречалась — 1 и больше, т.е. «true». Учитывая знак инверсии «!» получаем все наоборот: когда строка не встречалаясь «!0»(не 0) == «true» — печатаем, «!1» (не true) == false — не печатаем.
    Недавно на unix.com мне пришлось это объяснять на бусурманском, там нет закладок и не хочется это потерять
    Цитата:
    Сообщение от nezabudka
    awk does not print a key equal to 1. It's print when the key is zero. Post increment ++
    Value is first equal to 0 and then 1, 2, etc.
    0 == fals == no print
    1 == true == print
    but the sign of inversion ! makes so
    !0 == true == print
    !1 == false == no print
    !2 == false == no print
    Bash
    1
    2
    3
    
    awk '1' file
    awk '0' file
    awk '!0' file
    when you enclose the script in braces you can not put an inversion sign
    In the body it does not work
    print array:
    Bash
    1
    
    awk '{t[$0]++} END {for(i in t) print i}'
    in
    Bash
    1
    
    awk '!t[$0]++'
    doesn't print the array, it just gets the true or false for output or not for evry line
    Цитата:
    Сообщение от Scrutinizer
    Everything in awk has the form condition{action}. If the condition evaluates to 1 then the action is performed. If the condition is omitted then the default condition is 1, so the action is performed. If the action is omitted then - if the condition is 1 - the default action is performed, which is {print $0}, which is "print the record", by default a line of the input file.
    There is just a condition with the default action
    Исходя из прочитанного я модифицировала строчку.
    Значит, что бы получить вывод всех вводимых команд включая от root, достаточно ввести:
    Bash
    1
    
    awk '/@/' output.session
    Ну естественно если знак "@" присутствует в вашей строке приглашения.
    А что бы иметь еще и возвращаемые значения пишим:
    Bash
    1
    
    awk '/[@a-z]/' output.session
    Или на всякий случай вот так с шапкой и окончанием:
    Bash
    1
    
    awk '/./' output.session
    Такой короткий фильтр применительно к чему либо я ещё не встречала ни где.
    Запись от nezabudka размещена 31.03.2016 в 13:34 nezabudka вне форума
    Обновил(-а) nezabudka 31.08.2020 в 21:05
  4. Старый комментарий
    Аватар для Marinero
    Цитата:
    Сообщение от nezabudka
    Такой короткий фильтр применительно к чему либо я ещё не встречала ни где.
    Чем длиннее
    Bash
    1
    
    grep . output.session #любая непустая строка
    и работает не в пример быстрее…
    Запись от Marinero размещена 31.03.2016 в 14:42 Marinero вне форума
  5. Старый комментарий
    Аватар для nezabudka
    Цитата:
    Сообщение от Marinero Просмотреть комментарий
    grep . output.session
    А то я не пробовала. В данном случае не получится и grep и egrep нервно курят в сторонке
    Bash
    1
    2
    
    file output.session 
    output.session: UTF-8 Unicode text, with CRLF, LF line terminators, with escape sequences
    Запись от nezabudka размещена 31.03.2016 в 15:07 nezabudka вне форума
    Обновил(-а) nezabudka 31.03.2016 в 15:29
  6. Старый комментарий
    Аватар для tezaurismosis
    nezabudka, большое спасибо, очень удобная вещь.
    Запись от tezaurismosis размещена 02.04.2016 в 08:50 tezaurismosis вне форума
  7. Старый комментарий
    Цитата:
    Сообщение от nezabudka Просмотреть комментарий
    Bash
    1
    
    awk '/./' output.session
    Непонятно как это выражение делает свое дело. Проверил, работает хорошо, но как работает не понимаю.
    Запись от IlyaLinux размещена 01.05.2016 в 12:47 IlyaLinux вне форума
  8. Старый комментарий
    Аватар для nezabudka
    IlyaLinux В выходном файле много специальных не печатных знаков которые и отсеивает данный фильтр.
    Bash
    1
    
    cat -vet output.session
    Запись от nezabudka размещена 24.10.2016 в 09:15 nezabudka вне форума
    Обновил(-а) nezabudka 19.12.2018 в 07:12
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru