O kernel interpreta a linha que inicia com #!
e a utiliza para executar o script, passando o nome do script; então isso acaba rodando
/bin/rm scriptname
que exclui o script. (Como Stéphane Chazelas aponta , scriptname
aqui é suficiente para encontrar o script - se você especificou um caminho relativo ou absoluto, que é passado como está, caso contrário, qualquer caminho encontrado em PATH
é prefixado, incluindo possivelmente a sequência de emptry se seu PATH
contiver isso e o script estiver no diretório atual. com um script de eco - #!/bin/echo
- para ver como isso funciona.)
Como hobbs apontou, isso significa que seu script é na verdade um script rm
, não um bash
script - o último começaria com #!/bin/bash
.
Veja Como os programas são executados para detalhes de como isso funciona no Linux; os comentários nesse artigo dão detalhes para outras plataformas. #!
é chamado de shebang, você encontrará muitas informações pesquisando esse termo (graças a Aaron para a sugestão). Como jlp apontou, você também o encontrará chamado de "pound bang" ou "hash bang" ( #
é comumente conhecido como "libra" - em países que não usam £
- ou "hash" e !
como "bang"). Wikipedia tem mais informações.