ランダムなパスワードを生成します。なぜ移植性がないのですか?

ランダムなパスワードを生成します。なぜ移植性がないのですか?

任意のパスワードを生成し、次のことをしたいと思います。

</dev/urandom tr -dc [:print:] | head -c 64

Ubuntuを実行している私のラップトップでは、期待どおりに印刷可能な文字のみが生成されます。ただし、学校サーバー(Red Hat Enterprise Linuxを実行)にSSHで接続して実行すると、同様の結果が得られ、3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�Kまったく機能しません。ここで何が間違っている可能性がありますか?

ベストアンサー1

あなたでしょうか?ロケールそしてティー質問。

今、GNU TRシングルバイト文字のみが完全にサポートされています。したがって、マルチバイトエンコーディングを使用するロケールでは、出力が奇妙に見えることがあります。

$ </dev/urandom LC_ALL=vi_VN.tcvn tr -dc '[:print:]' | head -c 64
`�pv���Z����c�ox"�O���%�YR��F�>��췔��ovȪ������^,<H ���>

シェルはマルチバイト文字を正しく印刷しますが、GNUはtr印刷できないと見なされるバイトを削除します。

確実に使用するには、ロケールを設定する必要があります。

$ </dev/urandom LC_ALL=C tr -dc '[:print:]' | head -c 64
RSmuiFH+537z+iY4ySz`{Pv6mJg::RB;/-2^{QnKkImpGuMSq92D(6N8QF?Y9Co@

おすすめ記事