읽을 때 내부의 키보드 키를 읽으십시오.

읽을 때 내부의 키보드 키를 읽으십시오.

일부 파일을 검색하는 스크립트가 있는데 그 중 일부에는 공백이 있으므로 를 사용하고 있습니다 while read. 이와 같은 루프 내에서 각 대화형 키 누르기를 기다리려면 read -p "Pause"를 사용해야 합니다. 그러나 키 누르기를 기다리는 대신 파이프의 첫 글자를 읽습니다. 다음과 같은 것이 필요합니다.

find . -name "*.o3g" | grep "pattern" | while read line
do
    process "$line"
    read -p "Press any key to continue"
done

답변1

이미 특정 코드를 사용하고 있으므로 bash다음을 수행할 수 있습니다(GNU grep또는 호환 가능하다고 가정).

find . -name '*.o3g' -print0 | grep -z pattern |
  while IFS= read -rd '' file; do
    process "$file"
    read -n1 -p 'Press any key to continue' < /dev/tty
  done

(여기서 문자(그러나 일부 키는 여러 문자를 전송함)는 제어 터미널에서 읽혀집니다.

또는 더 나은 방법은 다음 process에서 stdin이 파이프되는 것을 방지하기 때문입니다 grep.

while IFS= read -u 3 -rd '' file; do
  process "$file"
  read -n1 -p 'Press any key to continue'
done 3< <(find . -name '*.o3g' -print0 | grep -z pattern)

(수정되지 않은 표준 입력에서 문자를 읽는 경우)

당신은 또한 볼 수 있습니다찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?find출력 처리 방법 에는 다른 잠재적인 문제가 있습니다.

여기서 간단히 이렇게 할 수 있습니다:

find . -name '*.o3g' -path '*pattern*' -ok process {} \;

bash또한 자체를 제외한 GNU주의를 피하십시오 .

find . -name '*.o3g' -exec bash -c '
  for file do
    [[ $file =~ pattern ]] || continue
    process "$file"
    read -n1 -p "Press any key to continue"
  done' bash {} +

관련 정보