2013-09-15 2 views
1

У меня есть тривиальная ошибка, с которой я не могу обойти. Я пытаюсь вернуть различные номера разделов let, чтобы сказать «человек», так как он находится во всех разделах. Я использую команду -s, но у меня проблемы. Каждый раз, когда я его использую, я продолжаю получать «какую страницу руководства вы хотите». Любая помощь?Использование команды -s в сценарии bash

+1

Можете ли вы опубликовать команду, которую вы пробовали, и полученный результат? –

+0

fev @ ubuntu: ~/Desktop $ man -s man Какую страницу руководства вы хотите? это то, что я вижу – fevjitsu

+1

Вы ищете только раздел «человек», а не все разделы 1, 2, 3 и т. Д., Но какую страницу руководства вы хотите просмотреть из раздела «человек»? –

ответ

0

В случае получения номера раздела команды вы хотите что-то вроде man -k "page_name" | awk -F'-' "/^page_name \(/ {print $1}", заменяя любое вхождение page_name любой командой, в которой вы нуждаетесь.

Это не будет работать для всех систем, так как формат вывода «человек» является «реализацией». Другими словами, формат FreeBSD, OS X, различные варианты Linux и т. Д., Возможно, не совпадают. Например, шахта:

page_name (1)    - description 

Если вы хотите только номер раздела, я уверен, что есть что-то вы можете сделать такие, как сохранение результата этой линии в переменной оболочке и использовать расширение параметров для удаления круглые скобки вокруг номера раздела:

man -k "page_name" | awk -F'-' "/^page_name \(/ {print $1}" | while IFS= read sect ; do 
    sect="${sect##*[(]}" 
    sect="${sect%[)]*}" 
    printf '%s\n' "$sect" 
done 

Чтобы получить количество секций команды появляется, добавьте | wc -l в конце на одной и той же линии, что и done ключевого слова. Для команды mount, у меня есть 3:

2 
2freebsd 
8 
+1

Помните, что 'grep 'foo' | awk '{bar}' 'лучше написано 'awk'/foo/{bar} ''. В этом случае 'man -k | awk -F '[()]' '/^page_name \ (/ {print $ 2}' 'может быть ближе к тому, что вам нужно. – tripleee

+0

Я не использовал это изменение только потому, что в нем могут быть пробелы или скобки. Тем не менее, вы правы в отношении '/ foo /'. Я изменил свой ответ. –

+0

Пространства не будут иметь значения, если вы установите разделитель полей для открытия или закрытия круглых скобок. – tripleee

0

Правильный синтаксис требует аргумент. Обычно вы ищете либо

man -s 1 man 

прочитать документацию по команде man(1) или

man -s 7 man 

читать о макропакете man(7).

Если вам нужен список стандартных разделов, первый содержит это. Тем не менее, у вас могут быть дополнительные разделы, установленные локально. Например, список каталогов /usr/local/share/man может содержать дополнительные разделы.

(кстати, -s не «команда» в этом контексте, это вариант.)

0

Вы неправильно поняли природу -s. От man man:

-S списка, -s списка, --sections = список

Списка является разделённым двоеточием или разделенного запятыми список `заказа конкретных» ручных разделов для поиска. Этот параметр переопределяет переменную окружения $ MANSECT. (Параметр -s правописание для совместимости с System V.)

Так что, когда человек видит man -s man он думает, что вы хотите посмотреть на странице в разделе «человек» (который, скорее всего, не существует, так как оно не является нормальным разделом), но вы не сказали, на какой странице, поэтому он спрашивает:

Какую страницу руководства вы хотите?

BTW, WRT «человек просто тест Потому что я полагаю, что ее во всех разделах» - Неа, это возможно только в одном, и AFAIK нет никакого слова со страницей в все разделы. Более 2 или 3 были бы очень необычными.

Различные стандартные секции описаны также в man man.

+1

Существует «интро» страницы в большинстве разделов. – tripleee

+0

Как правило, в разделе 1 (для команды) есть «man' man», а в разделе 7 (для пакета макросов). –

Смежные вопросы