저는 오랜 find
사용자 이지만 스크립트에서 명령을 실행해 보는 것은 bash
이번이 처음인 것 같습니다 .find
여러 함수에 전달된 첫 번째 인수를 찾기 위해 모든 프로젝트 소스 파일을 반복하려고 합니다. 나는 작업을 수행하는 것처럼 보이는 작은 awk 스크립트를 작성하고 테스트했습니다. 다음을 통해 명령줄에서 실행할 수 있습니다.
find sources -name '*.cpp' -exec awk -f foo.awk {} \;
문제는 다음을 통해 스크립트에 넣으려고 할 때 발생합니다.
echo find sources -name *.cpp -exec awk -f foo.awk {} \\\; >foo.sh
이런 식으로 foo.sh에는 다음이 포함됩니다.
find sources -name *.cpp -exec awk -f foo.awk {} \;
이제 다음을 통해 bash 쉘에 소스를 입력하면
source foo.sh
오류가 발생했습니다.
찾기: '-exec' 인수 누락
인용 문제인 줄 알고 마지막 세미콜론 앞에 백슬래시를 두 배로 늘렸습니다. 아무런 차이가 없습니다. 그냥 웃기기 위해 백슬래시를 세 배로 늘려 보았습니다. 여전히 차이가 없습니다.
전체 공개: 저는 GNU Awk 5.1.0을 사용하여 cygwin에서 Windows 10을 실행하고 있습니다. 저는 스크립팅에 cat을 사용하고 있으므로 줄 끝 문제를 해결해야 합니다.
고쳐 쓰다
하지만 저는 그렇게 하지 않습니다. 다른 awk 스크립트를 사용하여 실행하면 방금 이 질문에 붙여넣은 스크립트가 제대로 작동합니다. 내일 다시 시도해 보고 결과를 게시하겠습니다.
귀하의 관용에 감사드립니다.
답변1
이는 따옴표가 없기 때문에 *.cpp
전달되기 전에 확장되거나 현재 디렉터리에 파일이 있는 find
경우 *cpp
스크립트에 기록되기 전에도 발생하기 때문입니다.
내가 옳다면 이것이 당신에게 필요한 일을 해야 합니다:
echo "find sources -name '*.cpp' -exec awk -f foo.awk {} \;" >foo.sh