Просто ради забавы или, скажем, ради удобства, я решил записать все справочные страницы в файлы.
Теперь, если я должен сделать это один за другим, я бы сделал man package-name > filename
. Но я хочу сделать некоторую умную работу и написать всех людей одновременно, либо с помощью одной команды, либо с помощью bash-скрипта. Все, что я до сих пор придумал, это
cd /usr/share #you may use any folder
whereis -m * | grep '.gz' |awk '{print$1}' |sed s/://g
. Это дает вывод, Называя все приложения, имеющие man-страницы. Часть этого, как показано ниже.
speech-dispatcher
stellarium
synaptic
syslinux
system-config-printer
tabset
terminfo
totem
ufw
unetbootin
unity
unity-greeter
update-manager
upstart
usb_modeswitch
vim
virtualbox
vlc
xmms2
xpdf
yelp
zenity
Теперь мне нужно перенаправить этот вывод в man
, чтобы я мог перенаправить его в файлы. Как только я это сделаю, я могу создать скрипт для cd в каждую папку и проверьте наличие mans .
Итак, мой вопрос: как мне этого добиться?
ИЛИ, может быть, существует альтернативный способ?
Я использую Ubuntu 12.10.
Пожалуйста, перенесите его в stackoverflow, если это уместно. Хотя я думаю, что здесь уместнее.
Есть много исполняемых файлов в /bin
. Если вы хотите скопировать соответствующие man-страницы в файлы, вы используете что-то подобное в своем терминале
for f in /bin/*;do man $(basename $f) > $HOME/man_$(basename $f); done
После выполнения команды вы найдете все man-страницы, соответствующие исполняемым файлам в /bin/
в твой дом. Например, страница руководства, соответствующая ls
, будет иметь имя man_ls.txt
в вашем доме.
Если вы хотите скопировать только часть, скажем, имя исполняемого файла начинается с r
, используйте
for f in /bin/r*;do man $(basename $f) > $HOME/man_$(basename $f); done
Вы можете получить несколько примечаний, например,
No manual entry for <some_executable>
See 'man 7 undocumented' for help when manual pages are not available.
для исполняемые файлы, в которых нет записи man.
Сделайте это для других папок, которые содержат такие исполняемые файлы, как /usr/bin/
, /usr/sbin/
, /sbin/
и т. Д.
Примечание:
вы можете использовать 2>/dev/null
с вашей командой для подавления сообщений об ошибках для исполняемых файлов без участия пользователя. например,
for f in /usr/bin/r*;do man $(basename $f) > $HOME/man_$(basename $f) 2>/dev/null; done
В соответствии с вашим подходом
Перейдите в папку и используйте это для того же результата,
for f in $(whereis -m * | grep '.gz' |awk '{print$1}' |sed s/://g); do man $f > $HOME/man_$f.txt; done
Прежде всего, , почему вам нужен файл, содержащий все страницы руководства? Если это облегчает поиск во всех них по какому-либо ключевому слову, GNU уже предоставляет apropos
только для этого:
apropos some-regular-expression
возвращает список всех man-страниц, соответствующих регулярному выражению в их имени или описании.
В любом случае, если вам все еще нужен энциклопедический файл, то, используя apropos, вы можете получить список всех man-страниц в системе, выполнив поиск универсального регулярного выражения:
apropos '.*'
и затем feed результирующий список в команде man
:
apropos '.*' | awk '{print $1;}' | xargs man > all-manpages.txt
Вы также можете использовать метод, описанный в ответе на аналогичный вопрос . «Сформировать список всех доступных команд». и что каждый делает ", заменив whatis
на man
.