Script Bash para remover o item do cache Nginx

1

Eu tenho o Nginx rodando no Ubuntu. Estou tentando escrever um script que exclua um item do cache Nginx.

Script: clear_single_cache_object.sh

#!/bin/bash
echo "Deleting: " 
grep -lr  /path/to/cache/* | xargs rm
echo "Done"

Esse script está no meu diretório pessoal e eu executo o script no termial da seguinte forma:

sh clear_single_cache_object.sh '/images/test.jpg'

A saída é esta:

Deleting: /images/test.jpg
: No such file or directory
Done

Em outras palavras, o script não está funcionando e o item não foi removido do cache. Eu também tentei executar o script como root.

Se eu digitar o seguinte comando no terminal, ele funcionará bem e o item será removido do cache.

grep -lr '/images/test.jpg' /path/to/cache/* | xargs rm

Por que isso não funciona quando eu executo o script? Eu suspeito que tenha algo a ver com a parte "| xargs rm" no script.

    
por thd 19.02.2015 / 15:40

1 resposta

1

Primeiro, glen jackman estava perto: seu script está usando terminações de linha CR-LF ( \r\n ). Por exemplo, recriou seu script manualmente com as terminações de linha CRLF:

$ cat foo.sh     
#!/bin/bash
echo "Deleting: " 
grep -lr  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

Altere seus finais de linha para o formato normal, instalando dos2unix e usando-o para converter:

sudo apt-get install dos2unix
dos2unix clear_single_cache_object.sh
Segundo, desde que você está dando uma shebang, por que você está chamando seu script com sh ? Torne-o executável e execute-o dretamente:

chmod +x clear_single_cache_object.sh
./clear_single_cache_object.sh /images/test.jpg

Se você tivesse feito isso, você poderia ter pegado o problema antes:

$ ./foo.sh 
bash: ./foo.sh: bad interpreter: /bin/bash^M: no such file or directory

Em terceiro lugar, corrija seu editor. Se você estiver criando o script no Windows e copiando para o servidor, use um editor decente como o Notepad ++, que suporta fins de linha Unix (LF).

    
por muru 22.02.2015 / 06:09