Як змусити людину працювати над командами та ключовими словами вбудованими оболонками?


56

Я використовую manкоманду весь час, коли хочу отримати інформацію про певну команду. Але це не дуже допомагає мені, коли ця конкретна команда є вбудованою оболонкою. Наприклад:

man cd

повертає:

No manual entry for cd

Моє питання: це можна зробити manтакож працювати для всіх оболонок вбудованих команд (як cd, alias, historyі т.д.) і ключові слова (як if, while, [[, {і т.д.)?


І як echoце вбудована команда, але має довідкову сторінку?
Парто

5
@AvatarParto echo- це також системна команда (виконується), розташована в /bin. Ви можете перевірити це за допомогою type -a echo. Те саме відбувається timeі з, можливо, з іншими.
Radu Rădeanu

Ви info bashще досліджували ?
bbaassssiiee

Ви завжди можете писати свої власні сторінки.
Елліотт Фріш

Відповіді:


66

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

help -m cd | less

відобразить інформацію про cdкоманду у форматі майже точно так само, як на сторінці вручну.

Починаючи з цієї команди, ви можете перетворити 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>

Дуже розумний підхід! +1
phatskat

5
Якщо є виконувані файли, замасковані вбудованими, ви можете вказати розділ. man timevs.man 1 time
Зупиніть шкодити Моніці

1
... зауважте, хоча якщо ви zshкористувач, вам не так пощастило: bugs.launchpad.net/ubuntu/+source/zsh/+bug/1242108 (не встановлено жодної сторінки)
Rmano

info, help -mЧому ми не можемо просто мати хороші сторінок людини в ці дні? У будь-якому випадку, дякую!
Tor Klingberg

+1 ... приємно! Поведінка функції yr дещо нагадує те, що відбувається через перевантаження функції в C / C ++ ... Тільки цікаво man typeне дає опису параметрів "-a" або "-t" в Ubuntu 14.04.4 .... і все ж, вони Ви там!
Cbhihe

28
man bash-builtins

Він містить фрагменти довідки для вбудованих команд, хоча і у трохи більш ущільненому форматі, ніж helpеквівалент.


Добре знати! Це з розділу 7 посібника. Я досі не чув про цю сторінку керівництва. +1, але я не можу прийняти цю відповідь, оскільки це не зовсім те, що я запитав.
Radu Rădeanu

На macOS High Sierra ця команда - просто "людина побудована"
Тоні Барганскі,

13

Ви можете встановити сторінки вручну щодо використання системи POSIX для розробки як,

sudo apt-get install manpages-posix-dev

Він надасть довідкові сторінки для вбудованих оболонок.

$ 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]


...

3
Я чекав, коли хтось прийде з цією відповіддю. Але проблема полягає в тому, що це буде працювати лише для деяких вбудованих - тих, що визначені POSIX .
Radu Rădeanu

3
Bash суворо не дотримується POSIX, якщо не працює в режимі POSIX, тому ці довідні сторінки можуть бути не вичерпними, а можуть бути помилковими в деяких обставинах, особливо при описі поведінки певних функцій.
Кріс Даун

@ RaduRădeanu так, ви абсолютно правильні, він буде працювати для деяких вбудованих.
souravc

3

Це рішення працює чудово, але це трохи жарт, тому що перше, що я подумав, читаючи ваше запитання, було: «Хто все ще буквально використовує людину з командного рядка? Чи не всі просто Google шукають потрібну сторінку (щоб вони отримували фантазії, такі як необмежена прокрутка)? '. Тоді я зрозумів, що сайти, на яких я Google, зазвичай, мають обидва типи команд, то чому б просто не використовувати їх для надання єдиного інтерфейсу на всій команді. Отже, ця забава народилася.

Для цього потрібне підключення до Інтернету для будь-яких записів, які ви хоч раз не шукали. Також йому потрібні ці дві невеликі програми, яких немає в установці Ubuntu за замовчуванням:

 sudo apt-get install tidy html2text

Вони абсолютно не потрібні, але вони допомагають зробити це виглядати трохи приємніше. Tidy очистить 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 man man Я знайшов і записи системи, які ми хочемо в ньому). Якщо ви цим більше не користуєтесь, вам захочеться видалити це місце, щоб відновити місце на диску.

Сподіваємось, решта досить прямо вперед.


6
"Хто ще буквально використовує людину з командного рядка?" Мені! та всі інші, хто має відвідати центр обробки даних (немає Інтернету;))
Rinzwind

Якщо взяти точку, це не допоможе вам зрозуміти.
krowe

6
Я думаю, що супозиторій, я рідко коли-небудь використовую Google для пошуку команд bash. Набагато швидше просто набрати "man command", не виходячи з клавіатури.
Лоран

Команда alt + - -> alt + d -> зробить те ж саме без миші та без скасування поточної команди cli та з прокруткою та з мільйоном інших приємних речей, які дає вам браузер. Я впевнений, що ти нічого про це не знаєш, тому що твій завжди користується цим сайтом та іншими, як це від lynx ... ffs
krowe

У разі вбудованої imanфункції ваша функція повертає той самий вихід, що і man bash-builtins.
Radu Rădeanu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.