나는 STDIN
을 통해 비밀번호를 받고 몇 가지 다른 검사를 거치는 bash 스크립트를 작성하고 있습니다.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
그것은 확장하고있는 표준이 아니며, 'echo'호출의 쉘입니다. 한 가지 가능한 방법은 임시 파일에 파일을 저장하고 파일을 'shred -u'하는 것입니다. 또 다른 방법은'eval'과'sed'를 부적절한 방법으로 적용하는 것입니다 ... – 0xC0000022L
실제로 STDIN에서 읽는 원본 스크립트는 STDIN에서'gra $$'를 입력 할 때 잘 동작하지만 테스트 명령은'$$' INPUT 변수에서 읽히기도 전에. – anubhava
또한 'read'는'-r'을 사용하지 않는 한 입력에서 백 슬래시를 사용합니다. – AmigoNico