bash 명령의 중첩 문자열

bash 명령의 중첩 문자열

Python 파일의 모든 shebang 줄을 나열하는 스크립트를 작성하려고 합니다.

내가 하고 싶은 일은

sudo bash -c 'for logf in $(find / -name "*.py"); do fgrep '#!/usr/bin' "$logf"; done'

이로 인해 오류가 발생합니다 bash: !/usr/bin': event not found. 오류의 의미가 불분명하지만 이유를 이해합니다.

bash문제는 명령을 실행하지 않고 다른 문자열이 포함된 문자열을 전달하는 방법을 모른다는 것입니다 .

"#!"을 생략하면 작동하지만 물론 다른 많은 줄도 포함됩니다.

나는 이스케이프와 문자열의 거의 모든 조합을 시도했지만 성공하지 못했습니다.

답변1

의견을 보내주셔서 감사합니다. 작동하는 두 가지 버전이 있습니다. 몇 가지 변경 사항을 적용하고(줄 시작 부분의 shebang만 확인) shebang 뒤에 공백을 허용했습니다.

sudo bash -c 'for logf in $(find / -name "*.py"); do grep '^\\#\\!/usr/bin' "$logf"; done'

어떤 이유에서인지 shebang 다음에 공백을 남기려고 하면 제대로 작동하지 않습니다.

더 나은(그리고 더 간단한)

sudo find / -name "*.py" -exec grep '^#! */usr/bin' {} \;

관련 정보