Shell

生成隨機密碼;為什麼這不是攜帶式的?

  • July 21, 2017

我想生成一個隨機密碼,並且這樣做:

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

在我執行 Ubuntu 的筆記型電腦上,這只會按預期生成可列印的字元。但是,當我通過 ssh 連接到執行 Red Hat Enterprise Linux 的學校伺服器並在那裡執行它時,我會得到類似 的輸出3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K,這根本不會。這裡可能出了什麼問題?

這是您的語言環境tr問題。

目前,GNU tr僅完全支持單字節字元。所以在使用多字節編碼的語言環境中,輸出可能很奇怪:

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

shell 將正確列印多字節字元,但 GNUtr將刪除它認為不可列印的字節。

如果您希望它穩定,則必須設置語言環境:

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

引用自:https://unix.stackexchange.com/questions/182382