groff: can't find DESC' file groff:fatal error: invalid device utf8
Это говорит о том, что ваша настройка groff неверна или у вас их несколько, и человек использует не тот.
Изменение вашей локали на "C" (без UTF -8 на данный момент, в этой оболочке )ваши справочные страницы могут снова стать видимыми. Вы хотите посмотреть grops(1 )и grotty(1 )в разделе ФАЙЛЫ. Это скажет вам, где находится файл grops/grotty DESC
; он должен быть и для UTF -8.
В моей системе есть
$ ls /usr/share/groff/1.22.3/font/dev[aup]*/DESC
/usr/share/groff/1.22.3/font/devascii/DESC
/usr/share/groff/1.22.3/font/devpdf/DESC
/usr/share/groff/1.22.3/font/devps/DESC
/usr/share/groff/1.22.3/font/devutf8/DESC
Если вы не найдете devutf8/DESC
, ваша установка groff не завершена (по отношению к UTF -8 ). Если вы его найдете, вам нужно будет проверить, есть ли у вас две установки groff и, если да, использует ли man(1 )правильную.
Чтобы убедиться, что ваша установка groff может отображать вашу справочную страницу без man(1 ), вы можете использовать groff напрямую,
$ nroff -t -e -mandoc openshell2017/opsh/man/opsh.1 | less
Вы можете использовать что-то вроде:
#!/bin/bash
echo "please enter filename"
read filename
find. -name "$filename" | egrep '.*'
if [ "$?" -ne 0 ]
then
echo "file does not exist"
fi
Для простой задачи поиска всех файлов с определенным именем с помощью bash
вам не нужен find
. Утилита find
более полезна для случаев, когда вам действительно нужно выполнять операции с найденными файлами.
В оболочке bash
есть специальный шаблон **
, который «рекурсивно» сопоставляется с подкаталогами. Этот шаблон активируется установкой параметра оболочки globstar
.
#!/bin/bash
shopt -s globstar dotglob nullglob
pathnames=(./**/"$1" )
if [[ ${#pathnames[@]} -gt 0 ]]; then
printf 'Found "%s"\n' "${pathnames[@]}"
else
printf 'Found no file named "%s"\n' "$1"
fi
Это расширит шаблон ./**/"$1"
, который соответствует всем именам файлов, соответствующим первому аргументу командной строки сценария в любом месте текущего каталога или ниже него. Полученные пути сохраняются в массиве pathnames
. Затем выполняется проверка длины этого массива, и если он содержит что-то (, массив имеет длину больше нуля ), элементы массива выводятся на печать. Если массив пуст, выводится соответствующее сообщение.
Параметры оболочки dotglob
и nullglob
обеспечивают соответствие шаблонов подстановки оболочки скрытым файлам и полное удаление шаблона, если он ничему не соответствует, соответственно.
Обратите внимание, что сценарий (, как и ваш код ), не делает различий между обычными файлами, каталогами, символическими ссылками или другими типами файлов.
Тестирование этого скрипта:
$ bash ~/script.sh.zshrc
Found "./.zsh/.zshrc"
Found "./skel/.zshrc"
$ cd /etc
$ bash ~/script.sh.zshrc
Found no file named ".zshrc"
Без этого скрипта установка параметров оболочки failglob
и globstar
в bash
позволила бы нам эффективно делать то же самое, что и скрипт непосредственно в командной строке:
$ shopt -s globstar failglob dotglob
$ echo./**/.zsh
./.zsh
$ echo./**/.zshrc
./.zsh/.zshrc./skel/.zshrc
$ echo./**/booo
bash: no match:./**/booo