다음과 같이 실행되는 스크립트가 있습니다.
곱슬https://example.com/install.shzsh--
스크립트는 사용 입력에서 읽어야 합니다.
read "human_name?Your human name ?"</dev/tty
문제는 사용자가 입력을 보고 응답을 입력할 수 있지만 응답이 human_name에 저장되지 않는다는 것입니다.
예:
cat <<EOM | zsh -
read "human_name?Your human name ?"</dev/tty
if [ -z "$human_name" ] ; then echo "tears" ; else echo "HI" $human_name; fi
EOM
결과 :
Your human name ?Pat
tears
어떤 지침이 있습니까?
답변1
/dev/tty
프로그램이 백그라운드 작업이 아닌 한 리디렉션을 통해 항상 터미널에서 읽을 수 있습니다. 백그라운드 작업인 경우 포그라운드로 전환될 때까지 SIGTTIN에 의해 일시 중지됩니다.
스크립트의 문제는 터미널에서 읽는 것이 아니라 읽은 내용으로 무엇을 하느냐입니다. here 문서를 보간과 함께 사용했기 때문에 $human_name
here 문서가 빌드될 때 보간이 수행되었으며 당시에는 비어 있었습니다. 실행 중인 셸이 문서 zsh -
를 보고 구문 분석할 수 있도록 보간이나 따옴표 달러 기호 없이 여기 문서를 사용해야 합니다.
고양이<<"마치다"zsh-- "human_name? 당신의 이름은 </dev/tty"입니다. if [-z "$human_name"]; 그렇지 않으면 echo "hi" $human_name; 결론