이 코드 시도했습니다 :CTRL + C에서 멈출 루프를 Bash로 작성하는 방법은 무엇입니까?
ls | while read file; do mpg123 "$file" || break; done
을하지만 CCTRL +를 누르면, 그것은 다음 곡을 재생합니다. 어떻게하면 CTRL + C에 침입 할 수 있습니까?
이 코드 시도했습니다 :CTRL + C에서 멈출 루프를 Bash로 작성하는 방법은 무엇입니까?
ls | while read file; do mpg123 "$file" || break; done
을하지만 CCTRL +를 누르면, 그것은 다음 곡을 재생합니다. 어떻게하면 CTRL + C에 침입 할 수 있습니까?
귀하의 문제는 당신이 CTRL-C (SIGINT
)를 누르면, mpg123
는 그것을 포착 한 상태 0
에 반환 그래서 당신의 쉘이 신호를 수신하지 않을 것이다,라는 것이다 따라서이 중단되지 않습니다 루프.
반복 재생이 중단 될 때까지 ctrl-c을 계속 누르면됩니다.
다른 플레이어를 사용하십시오. 예를 들어 mplayer
은 ctrl-c에 상태가 1
인 것으로 표시되므로 작동해야합니다.
ls | xargs -d '\n' -n 1 mplayer
당신이 어떤 이유로 while 루프를 선호하는 경우, 예를 들면 :
xargs
를 사용하여 좀 더 우아한 방법으로 명령을 다시 작성할 수 말했다 당신은 파일 이름을 프린트하거나 어떻게 든 변경하고 싶다면, 먼저 프로세스를 백 그라운드 처리하고 나서 wait
을 보내서 SIGINT (Ctrl + C)를 트랩 할 수있다. wait
은 process
대신 SIGINT를 잡을 것이다. :
#!/bin/bash
find . -type f -print0 |
while read -r -d '' f; do
echo "$f"
process "$f" > "$f.processed" &
wait $!
done
(read -d ''
와 find -print0
는 서브 디렉토리를 제외 할 경우 찾을 -maxdepth 1
를 추가, 줄 바꿈 및 이것 저것 이상한 파일 이름을 지원합니다)