私はSTDIN
でパスワードを受け取り、いくつかの異なるチェックを経るbashスクリプトを書いています。BashはSTDINからの読み込み時にシンボルが展開されないようにします
シンボルを含むパスワードを使用すると問題が発生します。
プレーンパスワードgrassy
はOKですが、gra$$y
のような複雑な組み合わせはgra3308y
に拡張されます。
これは私が使用していたスクリプトです:
read INPUT
if [ $(echo -n $INPUT|wc -m) -ge 6 ]
then exit 0
else exit 1
fi
私は引用のすべての種類を試してみたが、私は特殊文字の拡大からSTDIN
パスワードを停止することはできません。
ここでは、これを解決するために何ができるのかについて、元の値を一重引用符で囲まない例を示します。スクリプト内の変数の展開の周り
[email protected] ~ $ echo gra$$| { read INPUT; echo ${INPUT}; }
gra2598
これは拡張している標準ではなく、 'echo'を呼び出すシェルです...可能な方法の1つは、一時ファイルとそのファイルを 'shred -u'に保存することです。もう一つは 'eval'と' sed'を卑劣な方法で適用することです... – 0xC0000022L
実際にSTDINから読み込むオリジナルのスクリプトは、STDINで 'gra $$'を入力するとうまく動作しますが、もちろんテストコマンドは '$$'それがINPUT変数で読み込まれる前に。 – anubhava
'-r'を使用しない限り、' read'は入力のバックスラッシュを取ります。 – AmigoNico