単一の Bash 行から XKCD パスワードを生成する

単一の Bash 行から XKCD パスワードを生成する

世の中には「XKCD パスワード」ジェネレーターがいくつかありますが、タスクは非常に簡単なので、コンパクトでシンプルなソリューションが欲しかったのです。私の要件は次のとおりです。

  • 1行のエイリアス(または数行の関数)を記述する.profile
  • 標準 Unix コマンド (パッケージは不要)
  • 列出力( などpwgen
  • タイトルケースの単語(読みやすさのため)

(私は、シンプルさのためにコマンドライン オプションを放棄することに満足しています。)

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

現在の問題:

  • shufbrew install coreutilsmacOS(私も使用しています)では必要です
  • sed必要brew install gnu-sed(同上)
  • tr -d '\n' | awk '{print $1}'馬鹿げているようだ。

Linux と macOS の両方で動作する、短くて読みやすいコマンドラインを作成するにはどうすればよいでしょうか?

余談ですが、一般的な名前の短い単語リストから難解な単語の長い単語リストまで幅広い SCOWL を使用すると、記憶しやすさとエントロピーのバランスをとることができることがわかりました。

答え1

私は現在 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入力をランダムに順序付けします。これは疑似ランダムに過ぎませんが、他のほとんどのプログラムでもこれくらいの精度で実行できます。次に、 を使用してそのセットから 4 つの単語を選択しますhead。GNU の代わりにsedawkを使用して各行の最初の文字を大文字にすることができます。最後に、echoを使用して終了改行を配置します。これはすべてサブシェル内にあるため、ループ、パイプ、またはその他の構造に簡単に組み込むことができます。

関連情報