편집하다:
내에서 작동하는 것 같습니다 bash
. 문제가와 관련이있는 것 같습니다 zsh
. 이 문제를 게시하기에 더 좋은 사이트가 있으면 알려주세요.
일련의 디렉토리를 만드는 간단한 스크립트를 작성 중입니다. 사용자가 확인하기 전에 확인을 원합니다. 다음을 기본으로 사용하고 있지만 bash 함수 내에서 실행할 수없는 것 같습니다. 함수 외부에 넣으면 정상적으로 작동합니다. 다음은 격리 된 예입니다.
read.sh
#!/bin/bash
test() {
read -p "Here be dragons. Continue?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "You asked for it..."
fi
}
이 SO 게시물의 코드 .
파일을 소싱하거나 test
다음과 같은 오류가 발생 read:1: -p: no coprocess
합니다. 내가 그것을 배치 할 때 동일한 출력.bashrc
편집 : :
hen
- 함수가 구성 파일에 있기를 원하므로 모든 디렉토리 (이상적으로는 .bashrc 또는 .zshrc)에서 호출 할 수 있습니다
- 첫 번째 주석 행의 형식을 수정했습니다. 문제가 여전히 존재합니다
zsh
- Bash 버전은 3.2이지만 문제가 bash가 아닌 zsh에 있음을 알 수 있도록 도와주었습니다.
답변
–p
옵션은 동일한 것을 의미하지 않는다 bash
의 read
명령에 내장 zsh
의 read
내장 명령한다. 에서 zsh
의 read
명령, –p
수단 – 추측은 – “입력은 coprocess에서 읽습니다.”나는 당신과 당신의 프롬프트를 표시하는 것이 좋습니다 echo
또는 printf
.
또한 교체해야 –n 1
와 –k
나 –k 1
.
zsh
의 상당 bash
의 read -p prompt
IS
read "?Here be dragons. Continue?"
?
첫 번째 인수에서 a 다음 에 나오는 것은 프롬프트 문자열로 사용됩니다.
물론 읽을 변수 이름을 지정할 수 있습니다 (더 나은 스타일 일 수 있음).
read "brave?Here be dragons. Continue?"
if [[ "$brave" =~ ^[Yy]$ ]]
then
...
fi
쉘 변수를 인용하는 것도 일반적으로 좋은 생각입니다.
답변
이 코드는 zsh에서 원하는 것을하는 것 같습니다.
(당신이 언급 한 질문은 bash에 대한 것입니다).
#! / usr / bin / env zsh 테스트() { echo -n "여기는 용입니다. 계속 하시겠습니까?" 답장 읽기 [[$ REPLY = ~ ^ [Yy] $]] 인 경우 그때 echo "당신은 그것을 요구했습니다 ..." fi } 테스트
세 의견 :
답변
이 버전은 하나 이상의 사건을 가질 수 있도록 y
하거나 Y
, n
또는N
-
선택 사항 : 승인 질문이 제공 될 때까지 질문을 반복하십시오.
-
선택적으로 : 다른 답변은 무시
-
선택적으로 : 원하는 경우 터미널을 종료하십시오.
confirm() { echo -n "Continue? y or n? " read REPLY case $REPLY in [Yy]) echo 'yup y' ;; # you can change what you do here for instance [Nn]) echo 'nope n' ;; # Here are a few optional options to choose between # Any other answer: # 1. Repeat the question *) confirm ;; # 2. ignore # *) ;; # 3. Exit terminal # *) exit ;; esac # REPLY='' }
이것도 주목하십시오 :이 함수의 마지막 줄에서 REPLY 변수를 지우십시오. 그렇지 않으면 echo $REPLY
터미널을 열거 나 닫거나 다시 설정할 때까지 계속 설정되어 있습니다.