저는 사용자가 여러 파일을 편집할 수 있는 스크립트를 작성 중입니다. 각 파일을 시작하려고합니다 vim
.
파일 이름을 배열에 넣고 배열의 각 요소를 반복하고 각 반복마다 vim을 시작해 보았습니다. 그러나 이는 vim
첫 번째 요소에 대해서만 시작되고 스크립트는 중지됩니다. 내 목표를 어떻게 달성할 수 있나요?
답변1
루프 내에서 대화형 콘텐츠를 실행하려면 표준 입력과 다른 파일 설명을 사용해야 합니다.
#!/bin/bash
while read -r file <&3; do
vim "$file" || break
done 3< <(find . -type f)
또는 비정상적인 파일 이름을 지원하려면 널 바이트 구분 기호를 사용하십시오.
#!/bin/bash
while IFS= read -r -d '' file <&3; do
vim -- "$file" || break
done 3< <(find . -type f -print0)
의 출력은 find
프로세스 대체를 통해 파일 설명자 3에 공급된 다음 를 read
통해 로 전달됩니다 <&3
.
/편집: 댓글에서 Wolfe의 제안을 기반으로 합니다.
답변2
나에게 이것은 작동합니다 :
#!/bin/sh
for f in *.txt
do
vim "$f"
done
각 파일에 대해 vim을 열고 이전 파일을 닫은 후 다음 파일을 엽니다.