Я пишу сценарий bash, который получит пароль через STDIN
и проверит несколько разных проверок.Bash предотвращает расширение символа при чтении из STDIN
У меня проблема, когда я использую пароль, содержащий символы.
Простой пароль grassy
в порядке, но сложная комбинация, такая как 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
Это не тот stdin, который расширяет его, это оболочка при вызове 'echo' ... один из возможных способов - сохранить его в временном файле и «shred -u» в этом файле. Другим было бы применение 'eval' и' sed' подлыми способами ... – 0xC0000022L
На самом деле ваш исходный скрипт, который читает из STDIN, отлично работает, когда вы вводите 'gra $$' в STDIN, но, конечно, ваша тестовая команда расширяет '$$' прежде чем он будет прочитан в переменной INPUT. – anubhava
Также обратите внимание, что 'read' ест обратную косую черту на вкладке, если вы не используете' -r'. – AmigoNico