Создание паролей XKCD из одной строки Bash

Есть несколько генераторов «XKCD password», но задача кажется такой прямой, поэтому я хотел получить компактное и простое решение. Мои требования:

  • Однострочный псевдоним (или несколько строк) для ввода .profile
  • Стандартные команды Unix (не требуют пакетов)
  • Вывод колонки (например, pwgen )
  • Заглавные слова (для удобства чтения)

(Я рад отказаться от параметров командной строки в обмен на простоту.)

 for i in {1..32}; do grep -E "^[az]{4,8}$" /usr/share/dict/words | gshuf -n4 | gsed 's/.*/\u&/' | tr -d '\n' | awk '{print $1}'; done | column 

Текущие проблемы:

  • shuf требует, чтобы shuf на macOS (который я также использую)
  • sed требует brew install gnu-sed (то же самое)
  • tr -d '\n' | awk '{print $1}' tr -d '\n' | awk '{print $1}' кажется глупым.

Как я могу сделать короткую, но читаемую командную строку, которая работает как на Linux, так и на macOS?

На стороне примечания я обнаружил, что с помощью SCOWL, который имеет диапазон от коротких списков слов с общими именами до длинного списка слов с неясными словами, вы можете компрометировать запоминаемость Vs. энтропия.

  • Инструмент для измерения качества энтропии?
  • Что делает «w» с урандом?
  • Легкая утилита / программа для запуска команды после случайной задержки
  • Что действительно вызывает эта команда?
  • Уменьшение или опорожнение энтропийного пула?
  • Подача / dev / random с чтением диска и т. Д.
  • libkcapi - Ошибка: Ошибка Netlink: не удается открыть сокет netlink
  • Может ли низкая энтропия заставлять сервер HTTPS работать медленнее?
  • One Solution collect form web for “Создание паролей XKCD из одной строки Bash”

    У меня нет доступа к моему Mac с того места, где я есть, но поскольку он работает с OS X 10.4.11, я не уверен, что он будет сопоставим с вашей средой. Следующее работает для создания единого пароля во FreeBSD. Если это не соответствует вашим потребностям, не стесняйтесь сообщить мне, чего не хватает в комментариях:

     (sort -R /usr/share/dict/words \ | head -n 4 \ | awk '{ sub(".", substr(toupper($0),1,1)); printf "%s", $0 }' \ ; echo) 

    В FreeBSD и моей системе Arch Linux sort -R случайным образом заказывает ввод. Это всего лишь псевдослучайное, но это так же хорошо, как и с большинством других программ. Затем выберите четыре слова из этого набора с head . Вместо того, чтобы использовать GNU sed , awk можно использовать для создания первого символа каждой строки. Наконец, echo используется для размещения завершающей новой строки. Это все в подоболочке для более легкого включения в цикл, трубу или другую конструкцию.

    Linux и Unix - лучшая ОС в мире.