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 루프에 변수를 설정하면 이제 괜찮을 것입니다.