Se você criar um arquivo executável com o seguinte conteúdo e executá-lo, ele será excluído.
Como é que isso funciona?
#!/bin/rm
shell-script
files
rm
executable
shebang
user253751
fonte
fonte
rm
, é sobre o#!
. A questão pode ser reformulada para como funciona qualquer script executável com um#!
.Respostas:
O kernel interpreta a linha que começa com
#!
e a usa para executar o script, passando o nome do script; então isso acaba correndoque 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 que foi encontradoPATH
é anexado, incluindo possivelmente a sequência de empry se vocêPATH
contiver isso e o script está no diretório atual. Você pode brincar com um script de eco -#!/bin/echo
- para ver como isso funciona.)Como hobbs apontou, isso significa que seu script é realmente um
rm
script, não umbash
script - o último começaria#!/bin/bash
.Consulte Como os programas são executados para obter detalhes de como isso funciona no Linux; os comentários nesse artigo fornecem detalhes para outras plataformas.
#!
é chamado shebang, você encontrará muitas informações pesquisando esse termo (obrigado a Aaron pela sugestão). Como o jlp apontou, você também o encontrará conhecido como "pound bang" ou "hash bang" (#
geralmente conhecido como "pound") - em países que não usam£
- ou "hash" e!
"bang" ) A Wikipedia tem mais informações.fonte
rm
será o caminho para o script, que é o primeiro argumento para a chamada do sistema execve () feita pelo processo. Normalmente, se você executou o script como./scriptname
, será./scriptname
e se você o invocou comoscriptname
, será/path/to/scriptname
onde/path/to
está a entrada em$PATH
que o script foi encontrado. Normalmente, isso ocorrerá somentescriptname
se você tiver a sequência vazia$PATH
e tiver invocado o script comoscriptname
escriptname
está no diretório atual.