Por que o seguinte script é excluído?

82

Se você criar um arquivo executável com o seguinte conteúdo e executá-lo, ele será excluído sozinho.
Como isso funciona?

#!/bin/rm
    
por immibis 03.05.2016 / 13:38

1 resposta

109

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.

    
por 03.05.2016 / 13:41