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).