파일을 복사하고 각 파일마다 진행 상황을 반영하는 API 테스트를 위해 쉘 스크립트를 작성했습니다.
각 사본 사이에 2 초의 절전 모드가 있으므로 아무 키나 눌러 스크립트를 일시 중지하여 더 깊이 테스트 할 수있는 기능을 추가하고 싶습니다. 그런 다음 아무 키나 눌러 다시 시작하십시오.
가능한 한 적은 수의 줄에 이것을 어떻게 추가 할 수 있습니까?
답변
스크립트에 무언가를 추가 할 필요가 없습니다. 쉘은 그러한 기능을 허용합니다.
- 터미널에서 스크립트를 시작하십시오.
- 동안 실행하고 터미널 사용을 차단한다 ctrl– z. 터미널이 다시 해제되고 프로세스가 중지되었다는 메시지가 표시됩니다. (이제 pocess 상태에
T
있고 중지되었습니다) - 이제 원하는대로하십시오. 다른 프로세스 / 스크립트를 시작하고 ctrl-로 중지 할 수도 있습니다 z.
jobs
터미널을 입력 하거나 중지 된 모든 작업을 나열하십시오.- 스크립트를 계속하려면
fg
(전경)을 입력하십시오 . 작업을 포 그라운드 프로세스 그룹으로 다시 시작하고 작업이 계속 실행됩니다.
예를보십시오 :
root@host:~$ sleep 10 # sleep for 10 seconds
^Z
[1]+ Stopped sleep 10
root@host:~$ jobs # list all stopped jobs
[1]+ Stopped sleep 10
root@host:~$ fg # continue the job
sleep 10
root@host:~$ # job has finished
답변
스크립트 안에 남아있는 동안 스크립트를 일시 중지하려면 절전 모드 대신 읽기를 사용할 수 있습니다.
당신이 사용할 수있는
read -t
read -n
읽기가 한 문자를 읽을 수 있는 시간 초과를 설정하려면 (실제로 아무 키나 누름) 스크립트를 계속하십시오
코드를 제공하지 않았으므로 다음은 코드 사용 방법의 예입니다.
q를 누르면 read -n1
키를 누를 때까지 스크립트가 계속 진행되지 않습니다.
키를 누르면 확인이 재설정되고 스크립트는 정상적으로 루프에서 계속됩니다.
while [[ true ]]; do
read -t2 -n1 check
if [[ $check == "q" ]];then
echo "pressed"
read -n1
check=""
else
echo "not pressed"
fi
echo "Doing Something"
done
입력이 화면 출력을 엉망으로 만들지 않도록 stty -echo
섹션의 시작과 stty echo
끝에 추가 할 수도 있습니다.
답변
함께 dd
하면 안정적으로 파일로부터 1 바이트를 읽을 수 있습니다. 을 사용 stty
하면 min
터미널 읽기 및 time
10 분의 1 초의 출력 을 규정 할 바이트 수를 설정할 수 있습니다 . 이 두 가지를 결합하면 sleep
완전히 없이 할 수 있다고 생각합니다. 단말기의 읽기 시간 초과가 작업을 수행하도록하십시오.
s=$(stty -g </dev/tty)
(while stty raw -echo isig time 20 min 0;test -z "$(
dd bs=1 count=1 2>/dev/null; stty "$s")" || (exec sh)
do echo "$SECONDS:" do your stuff here maybe
echo no sleep necessary, I think
[ "$((i+=1))" -gt 10 ] && exit
done
) </dev/tty
그것은 while
당신이 시험해보기 위해 조롱 한 작은 예제 루프입니다. 2 초마다는 dd
그 시도의 읽기에 시간이 초과 stdin
에서 재 – /dev/tty
– 그리고 while
루프 루프. 즉, 또는 dd
하지 않습니다 타임 아웃 당신이 키를 누릅니다 때문에 -이 경우 대화 형 쉘이 호출됩니다.
테스트 실행은 다음과 같습니다. 각 행의 헤드에 인쇄 된 숫자는 쉘 변수의 값입니다 $SECONDS
.
273315: do your stuff here maybe
no sleep necessary, I think
273317: do your stuff here maybe
no sleep necessary, I think
273319: do your stuff here maybe
no sleep necessary, I think
273321: do your stuff here maybe
no sleep necessary, I think
sh-4.3$ : if you press a key you get an interactive shell
sh-4.3$ : this example loop quits after ten iterations
sh-4.3$ : or if this shell exits with a non-zero exit status
sh-4.3$ : and speaking of which, to do so you just...
sh-4.3$ exit
exit
273385: do your stuff here maybe
no sleep necessary, I think
273387: do your stuff here maybe
no sleep necessary, I think
273389: do your stuff here maybe
no sleep necessary, I think
273391: do your stuff here maybe
no sleep necessary, I think
273393: do your stuff here maybe
no sleep necessary, I think
273395: do your stuff here maybe
no sleep necessary, I think
273397: do your stuff here maybe
no sleep necessary, I think