존재하다윈도우배치/CMD - 사용할 수 있는 스크립트 실행을 일시 중지합니다.
echo 'This is before pause.'
pause
echo 'The key was pressed, continuing...'
bash
이와 같은 표준 터미널을 사용하여 zsh
이를 어떻게 달성할 수 있습니까 (그러나 다른 터미널도 최대한 작동해야 합니다)? 물론 간단한 앱을 작성할 수도 있지만 , 제가 찾고 있는 C
표준적인 방법이 없다는 것이 믿기지 않습니다 .sleep
나는 다음을 사용하여 이러한 간단한 방법을 찾았습니다.읽다:
read -p 'Press [Enter] key to start backup...'
read -p 'Press any key to resume ...'
read -s -n 1 -p 'Press any key to continue . . .'
함수 내부
그러나 그들은 나에게 각각 XXX.sh: 4: read: arg count
처음 두 개 3: read: Illegal option -n
정도를주었습니다. 나는 bash 를 사용하고 있습니다 4.4.19(1)-release
.
답변1
read
명령이 작동하지 않는 주된 이유는 bash
명령이 의도되었지만 sh
.
이것인용된 기사설명하다,
Unix 계열 운영 체제에서는 쉘
read
에 내장된 명령 입니다.bash
이는 사용 중인 쉘을 포함하여 다른 많은 쉘에도 내장된 명령이지만 sh
in의 구문은 훨씬 더 풍부합니다.read
sh
#!/bin/bash
...
read -p 'Press [Enter] key to continue: '
...
파일을 실행 가능하게 만든 다음 프로그램으로 실행하는 것을 잊지 마십시오.
# Assume the script is called "demo"
chmod a+x demo
./demo
답변2
간단히 말해서, 단일 키 누름을 기다리는 쉬운 방법은 없습니다. Enter사용자가 줄을 입력할 때까지 기다리는 쉬운 방법이 있기 때문에 사용자에게 누르라고 요청하는 것이 더 쉽습니다 .
내장 read
명령은 한 줄을 읽습니다. 해당 행을 사용할 계획이 없더라도 해당 행의 내용을 저장하려면 변수 이름을 지정해야 합니다.
echo 'Press Enter to continue.'
read -r line
echo 'Continuing.'
#!/usr/bin/env bash
스크립트가 또는 이와 동등한 것으로 시작하는 경우 #!/usr/bin/env zsh
단일 read
키 누르기를 기다리도록 하는 추가 옵션이 있습니다. 어떤 키가 "모든 키"로 간주되고 어떤 키가 그렇지 않은지 사용자에게 가르치는 것은 수고할 가치가 없다고 생각합니다.
Unix 계열 시스템에서는 터미널 없이 무인으로 스크립트를 실행하는 것이 일반적입니다. 일반적인 서버에는 대부분의 경우 콘솔에 로그인한 사람이 없습니다. 따라서 사용자에게 확인을 요청하는 경우는 매우 드뭅니다.
답변3
read_a_key() (
exec </dev/tty
t=$(stty -g)
trap 'stty "$t"; return' EXIT INT QUIT TERM
stty raw -echo isig
dd count=1 2>/dev/null
)
printf '%s ' 'Press ANY KEY to continue ... '
key=$(read_a_key)
echo OK, continuing
read_a_key >/dev/null
사용자가 어떤 키를 눌렀는지 상관하지 않는 것처럼 사용하세요 .
이는 다음 명령에 false 또는 문자를 남기는 F1
bash와 달리 여러 문자(예: )로 변환되는 키에도 작동합니다 ;-)read -n1
OP
[[A
답변4
당신은 올바른 길을 가고 있습니다 :
read -p 'press Enter ...'
그러나 arg_count 오류가 발생하면 bash가 아닌 다른 쉘을 사용하고 있는 것입니다. 수정: 다음과 같은 매개변수를 추가하면 됩니다.
read -p 'press Enter ...' x
이제 셸에서 실행되어야 합니다. 추가 매개변수는 더미 이름이거나 사용자 답변을 저장하는 데 사용될 수 있습니다. 예:
echo You answered: $x