표준 입력에서 읽고 다음 명령으로 파이프

표준 입력에서 읽고 다음 명령으로 파이프

stdin에서 비밀번호를 읽고 출력을 억제하고 다음과 같이 base64를 사용하여 인코딩하고 싶습니다.

read -s|openssl base64 -e

올바른 명령은 무엇입니까?

답변1

읽기 명령은 bash 변수를 설정하지만 stdout으로 출력하지 않습니다.

예를 들어, stdout을 Nothing1 파일에 넣고 stderr을 Nothing2 파일에 넣으면 해당 파일에는 아무 것도 표시되지 않습니다(-s arg 유무에 관계 없음).

read 1>nothing1 2>nothing2 
# you will see nothing in these files (with or without -s arg)
# you will see the REPLY var has been set
echo REPLY=$REPLY

따라서 다음과 같은 작업을 수행할 수 있습니다.

read -s pass && echo $pass |openssl base64 -e
# Read user input into $pass bash variable.
# If read command is successful then echo the $pass var and pass to openssl command.

man bash에서 명령 읽기 SHELL 내장 명령:

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
          One  line  is read from the standard input, or from the file descriptor fd supplied as an argument to the -u option, and the first word is
          assigned to the first name, the second word to the second name, and so on, with leftover words and their intervening  separators  assigned
          to  the  last  name.  

    -s     Silent mode.  If input is coming from a terminal, characters are not echoed.

    If  no  names  are supplied, the line read is assigned to the variable REPLY. 

관련 정보