Форум программистов, компьютерный форум, киберфорум
nezabudka
Войти
Регистрация
Восстановить пароль
Заберите себе весь мир, оставте мне один компьютер.
Оценить эту запись

Цитируем странички мануала Linux без копипаста

Запись от nezabudka размещена 15.05.2020 в 14:32
Обновил(-а) nezabudka 15.05.2020 в 14:34

Есть хороший хак по использованию справки который я подсмотрела у пользователя
@Marinero и теперь постоянно пользуюсь им в комментариях вместо прямых цитат из
мануала. Это очень удобно, вот пример (специально чуть усложнила, чтобы показать возможности)
Bash
1
LESS=+/^\ *-S man ls
Но вот что интересно, не смотря на большое количество студентов на форуме, у
меня ни разу не спросили пояснений. Отсюда вывод или для них это не вопрос
или они не расположены к общению с мануалом. Не дождавшись заинтересованности,
решила создать топик для пятничного чтения.
Имея некоторый опыт работы в командной строке не составит большого
труда разобраться с этой строчкой. Я назвала это хаком только потому, что совсем
не очевидно с первого взгляда, что происходит под капотом этого однострочного скрипта.
Давайте вместе посмотрим что именно. Мы не будем только читать мануалы, а совершим
небольшую экскурсию руководствуясь в первую очередь здравым смыслом.
Начнем с того что испортим команду и выявим круг причастных "лиц".
Bash
1
LESS=-Z man man
Введенная строчка повлечет за собой сообщение об ошибке
Bash
1
There is no -Z option ("less --help" for help)
И тем самым с головой выдаст нам имя своего "подельника" - пейджера less.
Какую еще пользу мы можем извлечь из этого сообщения? А вот какую,
мы все таки посмотрим потом в мануал чтобы проверить наши выводы, но
сперва порассуждаем.
В сообщении говорится что в программе less нет такой опции как -Z, от сюда
мы можем сделать вывод что через переменную LESS мы можем передавать аргументы
команде less вызывая справку man. Закручено? Немного. Давайте избавимся от балласта
в следующем примере и поработаем с пейджером lees на прямую.
Имеются несколько вариантов посмотреть справку это опции -? и --help.
Сперва как есть less -?, а теперь присвоим переменной LESS это значение LESS=-? less
Увидели разницу? Я нет.
Сразу о такой конструкции передачи переменных.
Определение переменной перед выполнением команды изменяет или добавляет эту переменную
в среду окружения этого процесса и область видимости этой переменной будет ограничена
только этой командой. Можно немного поиграться
Bash
1
echo $LANG
или для чистоты эксперимента
Bash
1
bash -c 'echo $LANG'
Bash
1
2
3
4
LANG=C bash -c 'echo $LANG'
echo $LANG
X=Y bash -c 'echo $X'
X=Y awk 'BEGIN {print ENVIRON["X"]}'
Вернемся к странице справки команды less
Bash
1
LESS=+G?[+]cmd man less
Своими словами: в качестве аргумента можно задавать команды предваряя их знаком +
Разберем заодно вышеприведенную команду. +G - означает что необходимо перейти
в самый конец документа команда ? означает поиск с конца документа. Следующая
за этим строка содержит что именно мы собираемся найти, а так как второй + находится
в самой строке поиска то необходимо лишить его специального значения заключив его в квадратные
скобки. То есть мы попросим команду less найти первую встретившуюся подстроку "+cmd" начиная
поиск с конца документа.
Ну и в завершении стоит посмотреть на саму виновницу торжества
Bash
1
LESS=+4/LESS man less
Что означает - хотим найти четвертое совпадение подстроки "LESS" начиная поиск с начала
документа в странице справки man по утилите less.
А так же будет не лишним заглянуть к непосредственному конкуренту man
Bash
1
info --index-search=command bash
Всем добра.
Размещено в Без категории
Просмотров 191 Комментарии 6
Всего комментариев 6
Комментарии
  1. Старый комментарий
    Можно ещё попросить man использовать другой "пейджер" или фильтр для результата.
    Запись от politoto размещена 15.05.2020 в 15:13 politoto вне форума
  2. Старый комментарий
    Аватар для volodin661
    Нуу, знаете ли,
    при наличии живого и здорового view с его космическими возможностями заморачиваться с LESS как-то странно.

    ( можно просто назначить vim пейджером, a можно и просто использовать встроенную команду :Man,
    которая автоматом цепляет plugin man.vim )



    кстати, наткнулся случайно:
    https://github.com/brammool/vim9/blob/master/README.md

    в общем, ребята из NeoVim своим nvim хорошо накрутили хвост старику Муленару и
    он прекратил почивать на лаврах и взялся за серьёзные улучшения.
    Запись от volodin661 размещена 16.05.2020 в 00:46 volodin661 вне форума
    Обновил(-а) volodin661 16.05.2020 в 00:56
  3. Старый комментарий
    Аватар для nezabudka
    Для посмотреть самому согласна это не вариант, а для поделится цитатой в комментарии очень даже не странно,
    может сильно с экономить место, исключить неточности.
    То что улучшают vim с одной стороны это конечно радует, но с другой боюсь последствий как с firefox-ом.
    Сама я не пользуюсь плагинами к viim только в базовой комплектации в тандеме с ranger. Хотя нет, есть
    один, пользуюсь когда нужно сделать простенький график или схему DrawIt
    Пока не решаюсь познакомиться с неовимом - нехватает времени
    Надо было в статье привести подобную передачу команд в vim, ну да ладно, оставлю на потом
    Запись от nezabudka размещена 16.05.2020 в 07:50 nezabudka вне форума
  4. Старый комментарий
    Аватар для Marinero
    Давайте "раскрасим" man
    Bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    man() {
        env LESS_TERMCAP_mb=$'\E[01;31m' \
        LESS_TERMCAP_md=$'\E[01;38;5;74m' \
        LESS_TERMCAP_me=$'\E[0m' \
        LESS_TERMCAP_se=$'\E[0m' \
        LESS_TERMCAP_so=$'\E[38;5;110;48;05;242m' \
        LESS_TERMCAP_ue=$'\E[0m' \
        LESS_TERMCAP_us=$'\E[04;38;5;146m' \
        man "$@"
    }
    Я добавляю в это в .bash_aliases. Можно и напрямую в .bashrc
    Запись от Marinero размещена 16.05.2020 в 10:53 Marinero вне форума
  5. Старый комментарий
    Цитата:
    Сообщение от nezabudka
    ...И тем самым с головой выдаст нам имя своего "подельника" - пейджера less...
    Какие-то странные умозаключения, ибо все уже написано в справке (man less и man man). Строго говоря, man - всего-навсего обертка цепочки вызовов, например:
    Bash
    1
    
    gzip -dc /usr/share/man/man1/man.1.gz | groff -Tascii -man | less
    Это следует из справочного руководства. Так что выявление "подельника" в данном случае выглядит довольно наивным.
    Запись от greg zakharov размещена 18.05.2020 в 00:11 greg zakharov вне форума
  6. Старый комментарий
    Аватар для nezabudka
    Цитата:
    Сообщение от greg zakharov Просмотреть комментарий
    Какие-то странные умозаключения, ибо все уже написано в справке (man less и man man).
    Ну вот такой вот я выбрала подход, как по мне, странным он бы выглядел в справке.
    Кроме специфичной темы это еще и мое литературное творчество,
    Такая подача мне показалась более увлекательной для пятничного чтения.
    Вот еще цитаты которые в некоторой степени оправдывают странность предыдущей
    Цитата:
    Сообщение от nezabudka
    Мы не будем только читать мануалы, а совершим
    небольшую экскурсию руководствуясь в первую очередь здравым смыслом.
    Цитата:
    мы все таки посмотрим потом в мануал чтобы проверить наши выводы, но
    сперва порассуждаем.
    Спасибо за отзыв, он позволил мне более полно раскрыть некоторые
    моменты. приведенная вами строчка, тоже будет совсем не лишней.
    Запись от nezabudka размещена 18.05.2020 в 08:08 nezabudka вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.