Shell
生成隨機密碼;為什麼這不是攜帶式的?
我想生成一個隨機密碼,並且這樣做:
</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
,這根本不會。這裡可能出了什麼問題?
目前,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 將正確列印多字節字元,但 GNU
tr
將刪除它認為不可列印的字節。如果您希望它穩定,則必須設置語言環境:
$ </dev/urandom LC_ALL=C tr -dc '[:print:]' | head -c 64 RSmuiFH+537z+iY4ySz`{Pv6mJg::RB;/-2^{QnKkImpGuMSq92D(6N8QF?Y9Co@