Ubuntu에서 Nginx를 실행하고 있습니다. Nginx 캐시에서 항목을 삭제하는 스크립트를 작성하려고합니다.
스크립트 : clear_single_cache_object.sh
#!/bin/bash
echo "Deleting: " $1
grep -lr $1 /path/to/cache/* | xargs rm
echo "Done"
이 스크립트는 내 홈 디렉토리에 있으며 다음과 같이 터미널에서 스크립트를 실행합니다.
sh clear_single_cache_object.sh '/images/test.jpg'
출력은 다음과 같습니다.
Deleting: /images/test.jpg
: No such file or directory
Done
즉, 스크립트가 작동하지 않고 항목이 캐시에서 제거되지 않았습니다. 또한 스크립트를 루트로 실행하려고 시도했습니다.
터미널에 다음 명령을 입력하면 제대로 작동하고 항목이 캐시에서 제거됩니다.
grep -lr '/images/test.jpg' /path/to/cache/* | xargs rm
스크립트를 실행할 때 작동하지 않는 이유는 무엇입니까? 스크립트의 "| xargs rm"부분과 관련이 있다고 생각합니다.
첫째, glen jackman 이 가까웠습니다. 스크립트가 CR-LF ( \r\n
) 줄 끝을 사용하고 있습니다. 예를 들어 CRLF 줄 끝을 사용하여 스크립트를 수동으로 다시 만들었습니다.
$ cat foo.sh
#!/bin/bash
echo "Deleting: " $1
grep -lr $1 foo.txt | xargs echo
echo "Done"
$ file foo.sh
foo.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
$ sh foo.sh bar
Deleting: bar
: No such file or directory
Done
다음을 설치 dos2unix
하고 변환하여 사용 하여 줄 끝을 일반 형식으로 변경하십시오 .
sudo apt-get install dos2unix
dos2unix clear_single_cache_object.sh
둘째, 당신은 shebang을 제공하고 있기 때문에 왜 스크립트를 호출 sh
합니까? 실행 가능하게 만들고 제대로 실행하십시오.
chmod +x clear_single_cache_object.sh
./clear_single_cache_object.sh /images/test.jpg
그렇게했다면 문제를 더 일찍 발견했을 수 있습니다.
$ ./foo.sh
bash: ./foo.sh: bad interpreter: /bin/bash^M: no such file or directory
셋째, 편집기를 수정하십시오. Windows에서 스크립트를 만든 다음 서버에 복사하는 경우 Unix 줄 끝 (LF)을 지원하는 Notepad ++와 같은 괜찮은 편집기를 사용하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다