결과를 찾기 위해 읽기 루프를 사용할 때 사용자 입력 읽기

결과를 찾기 위해 읽기 루프를 사용할 때 사용자 입력 읽기

bash 스크립트에서 다음 명령문을 사용하여 find 결과를 반복합니다.

find ./ -type f \( -iname \*.mkv -o -iname \*.mp4 \) | while read line; do

이제 문제는 이 루프에서 "읽기"를 사용하여 사용자 입력을 요청할 수 없다는 것입니다. 왜냐하면 결과의 다음 행이 제공되기 때문입니다.

read mainmenuinput

사용자 입력을 기다리는 대신 다음 파일 이름을 알려줍니다.

이 문제를 어떻게 해결할 수 있나요?

레이펑님 감사합니다

답변1

find프로세스 대체에서 루프로의 리디렉션을 사용하는 경우 결과에 대해 다른 파일 설명자를 사용할 수 있습니다.

# this reads from fd 3
while IFS= read -r line <&3; do
    # this reads from fd 0 (stdin)
    read -p "Enter your input" main_menu_input
    # .. do stuff
done 3< <(
    find ... 
)

find 명령이 맨 아래에 나타나기 때문에 가독성이 약간 떨어지지만 파일 설명자를 사용하면 최대한의 유연성을 얻을 수 있습니다. 또한 while 루프는아니요파이프 때문에 서브셸에서 실행되므로 루프 뒤의 코드에서 의존하는 while 루프에 변수를 설정하면 이제 괜찮을 것입니다.

관련 정보