Во-первых, ваша непосредственная синтаксическая ошибка: "$ line"
- это 6-символьная строка dollar, space, l
, i
, n
, e
. Чтобы взять значение переменной line
, используйте "$line"
. Обратите внимание, что если значение -e
или -E
, echo
воспримет его как опцию и ничего не выведет. Чтобы избежать этого, используйте printf %s
. Кроме того, обычный read
удаляет пробельные символы в начале и конце строки и рассматривает обратные слэши как управляющие символы; чтобы прочитать строку буквально, используйте IFS= read -r
.
while IFS= read -r line; do
printf %s "$line" | …
fi
Не используйте SHA-256 для хэширования паролей. Хотя это лучше, чем обычный текст, это все равно плохо. SHA-256 не является приемлемым способом хэширования паролей, поскольку хэши паролей должны быть солеными и медленными. Подробное объяснение см. в Как безопасно хэшировать пароли?. Вы можете использовать общедоступную утилиту mkpasswd
для генерации приличных хэшей паролей; используйте SHA-256 или SHA-512 (несмотря на название, они нормальные, потому что на самом деле они не вычисляют хэш SHA2, а вычисляют итерированный хэш, что приемлемо медленно). Сгенерированный хэш включает случайную соль.
printf %s "$line" | mkpasswd -s -m SHA-512
В своем приложении вызовите системную функцию crypt
для проверки этих хэшей. Если используемый вами язык программирования не дает доступа к стандартной библиотечной функции crypt
, используйте библиотеку PBKDF2, bcrypt или scrypt, и используйте ее для генерации преобразованных хэшей (опять же, не используйте простой SHA-256 или SHA-512).
Когда вы запускаете команду man bash
, вы открываете документацию в системном пейджере по умолчанию (, обычноless
). Чтобы перейти к строкам, соответствующим определенному шаблону, вы можете ввести /<pattern>
. Например, сразу после входа в справочную страницу введите:
/brace expansion
После этого вы должны автоматически перейти к первому вхождению. Оттуда вы можете нажать n
, чтобы перейти к более поздним вхождениям.
Также расширение файла .gz
означает, что файл сжат с помощью gzip. Вы не сможете прочитать этот файл напрямую.
Результат поиска -исходных файлов справочной страницы в системе -может быть передан обратно человеку в локальном режиме для чтения каждой страницы.
man -wK --regex 'Brace Expansion' | sort -u | xargs man -l -P cat | grep -inF 'Brace Expansion'
Регулярное выражение, используемое для поиска команды man, по умолчанию -нечувствительно к регистру. Список результатов поиска сортируется, и любые дубликаты удаляются. Затем он передается обратно человеку с помощью xargs
. Используя пейджер cat
, каждая обработанная справочная страница может быть распечатана на стандартный вывод. В этот момент данные представляют собой поток простого текста, с которым может работать grep.
Параметр -l
параметра man
используется для активации локального режима, в котором анализируется файл напрямую, а не системный MANPATH.
Опция -P cat
параметра man
устанавливает для пейджера значение cat
. Это означает, что обработанная справочная страница будет отображаться с помощью cat
.
Опция -i
параметра grep
используется для поиска без учета регистра -. Опция -n
выводит номера строк (, просто добавленные для удобства ). Параметр -F
указывает, что шаблон представляет собой фиксированную строку.
Ответив на ваш первоначальный вопрос, следующая команда покажет вам все строки, содержащие «расширение фигурных скобок» на справочных страницах bash:
for page in $( man -k bash | awk '{print $1}' ); do
zgrep -i -n 'brace expansion' $(man -w $page) /dev/null
done
Сначала вы получаете список справочных страниц, соответствующих «bash» в их описании, после чего вы перебираете полученный список и ищете подходящую строку «расширение фигурной скобки». zgrep (1 )автоматически распаковывает для вас файлы;)