Как заставить `man` работать для встроенных команд оболочки и ключевых слов?

Мне нравится добавлять функции к jQuery, таким образом, эта функция помогла бы:

jQuery.fn.center = function () {
    this.css("position","absolute");
    this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) + 
                                                $(window).scrollTop()) + "px");
    this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 2) + 
                                                $(window).scrollLeft()) + "px");
    return this;
}

Теперь мы можем просто записать:

$(element).center();

Демонстрация: Скрипка (с добавленным параметром)

55
задан 18.05.2020, 01:35

4 ответа

Эти help команда, когда используется с -m опция, может отобразить информацию о встроенных командах в формате псевдостраницы справочника. Например:

help -m cd | less

отобразит информацию [приблизительно 116] команда в формате почти точно как в странице руководства.

Запуск с этой команды можно перенестись man команда в одной функции в Вашем .bashrc файл следующим образом:

man () {
    case "$(type -t -- "$1")" in
    builtin|keyword)
        help -m "$1" | sensible-pager
        ;;
    *)
        command man "$@"
        ;;
    esac
}

После того, как это man будет работать также на всю оболочку встроенные команды и ключевые слова. Например:

man :

отобразится:

NAME
    : - Null command.

SYNOPSIS
    :

DESCRIPTION
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

SEE ALSO
    bash(1)

IMPLEMENTATION
    GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2011 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
65
ответ дан 18.05.2020, 01:36
  • 1
    Если существуют исполняемые файлы, замаскированные builtins, можно определить раздел. man time по сравнению с man 1 time – john07 18.05.2020, 01:36
  • 2
    +1... хороший! Поведение Вашей функции напоминает несколько, что происходит посредством перегрузки функции в C/C++... Только любопытно man type не производит описание опций "-a" или "-t" в Ubuntu 14.04.4.... и все же, they' ре там! – user1143669 18.05.2020, 01:37
  • 3
    Очень умный подход! +1 – seedante 18.05.2020, 01:37
  • 4
    ... отметьте хотя, что, если Вы zsh, пользователь Ваш не так удачны: bugs.launchpad.net/ubuntu/+source/zsh/+bug/1242108 (никакие установленные страницы справочника) – David 18.05.2020, 01:37
  • 5
    info, help -m, почему can' t у нас просто есть хорошие страницы справочника в эти дни? Так или иначе, Спасибо! – ashui 18.05.2020, 01:38

Это решение работает отлично, но является чем-то вроде шутки также, потому что первая вещь, я думал, когда я считал Ваш вопрос, была, 'Кто все еще буквально использует человека из командной строки? Не все просто Google страница справочника они хотят (так, чтобы они получили необычные вещи как неограниченная прокрутка)?'. Тогда я понимал, что сайты I Google обычно, у всех есть оба типа команд итак, почему не только используют их для обеспечения универсального интерфейса страницы справочника через все команды. Следовательно, эта забава родилась.

Это требует интернет-соединения для любых записей, которые Вы уже не искали, по крайней мере, однажды. Также требуются эти два небольших приложения, которые отсутствуют в стандартной установке Ubuntu:

 sudo apt-get install tidy html2text

Они не абсолютно необходимы, но они действительно помогают заставить его выглядеть немного более хорошим. Опрятный уберет HTML, и html2text отформатирует тот HTML как форматированный текст (который обычно довольно тривиален, так как большинство этих сайтов уже в текстовом формате и просто обернутое в < pre> теги.

Теперь все, что необходимо сделать, добавляет это до конца ~/.profile:

function iman() {
    if [ ! -d "/usr/share/iman" ]; then
        sudo mkdir -m a=rwx /usr/share/iman
    fi
    if [ ! -f "/usr/share/iman/$1.html" ]; then
        curl "http://unixhelp.ed.ac.uk/CGI/man-cgi?$1"| tidy -n -asxml 2>/dev/null| html2text > "/usr/share/iman/$1.html"; 
    fi
    if [ -f "/usr/share/iman/$1.html" ]; then
        cat "/usr/share/iman/$1.html";
    else
        echo "Entry not found."
    fi
}

После того, как Вы выйдете из системы и затем обратно в Вас, должен быть в состоянии ввести это:

iman cd

и это отобразит страницу справочника для cd.

Это использует каталог данных (/usr/share/iman) для уменьшения наших сетевых требований (таким образом, он будет работать на записи, которые Вы уже нашли прежде даже без соединения; также для уменьшения нагрузки на этот случайный сайт страниц справочника Linux я нашел с системными записями, которые мы хотим в нем также). Если Вы не будете больше использовать это, то Вы захотите удалить это для восстановления дискового пространства.

Хотелось бы надеяться, остальное является довольно прямым.

3
ответ дан 18.05.2020, 01:37
  • 1
    Я думал бы противоположное, я редко когда-либо использую Google для поиска команд удара. It' s намного быстрее, чтобы просто ввести " человек command" не имея необходимость оставлять клавиатуру. – T1000 18.05.2020, 01:38
  • 2
    ' Кто все еще буквально использует человека из командной строки?' Я! и все остальные, которые должны посетить центр обработки данных (никакой Интернет;)) – Oliver Dixon 18.05.2020, 01:38
  • 3
    Взятая точка, этот won' t помогают Вам затем быть ясными. – kimamula 18.05.2020, 01:38
  • 4
    alt+tab-> alt+d-> команда сделает то же без мыши и не отменяя текущую команду CLI и с прокруткой и с миллионом других хороших вещей, которые браузер дает Вам. I' m уверенный Вы wouldn' t знают что-либо об этом, потому что Ваши alway используют этот сайт и других как он от рыси... ffs – jpaljasma 18.05.2020, 01:39
  • 5
    В случае builtins, Ваш iman функция возвращают тот же вывод как man bash-builtins. – Samuel Reid 18.05.2020, 01:39

Можно установить страницы руководства об использовании система POSIX для разработки как,

sudo apt-get install manpages-posix-dev

Это предоставит страницы справочника для оболочки builtins.

$ type cd
cd is a shell builtin

Теперь попытка,

$ man cd
CD(P)                      POSIX Programmer's Manual                      CD(P)

NAME
   cd - change the working directory

SYNOPSIS
   cd [-L | -P] [directory]


...
13
ответ дан 18.05.2020, 01:38
  • 1
    Я ожидал кого-то к, шел с этим ответом. Но проблема состоит в том, что это будет только работать на некоторый builtins - определенные POSIX. – Lesley 18.05.2020, 01:38
  • 2
    Bash строго не придерживается POSIX, если не выполнено в режиме POSIX, таким образом, эти страницы справочника не могут быть всесторонними, и могут быть неправильными при некоторых обстоятельствах, особенно при описании поведения определенных функций. – LZH 18.05.2020, 01:39
  • 3
    @RaduRДѓdeanu да, Вы абсолютно корректны, это будет работать на некоторый builtins. – Lesley 18.05.2020, 01:39
man bash-builtins

Это содержит отрывки справки для встроенных команд, хотя в немного более сжатом формате, чем help эквивалентный.

27
ответ дан 18.05.2020, 01:38
  • 1
    На macOS Высокая Горная цепь, что команда просто " человек builtins" – RichMeister 18.05.2020, 01:39
  • 2
    Хороший для знания! It' s от раздела 7 из руководства. Я didn' t слышал об этой странице руководства до сих пор. +1, но я can' t принимают этот ответ потому что it' s не точно, что я спросил. – Sahil Lakhwani 18.05.2020, 01:39

Теги

Похожие вопросы