Bash here - documentos e linhas shebang

2

É verdade concluir que ao usar um bash aqui-doc como bash << HEREDOC , então sempre e sem exceções, as linhas shebang como #!/bin/bash -x são redundantes?

Se eu tivesse que apostar, eu apostaria que sim, eles seriam redundantes e só poderiam nos usar para organizar as informações, como uma placa dizendo para novos usuários "o seguinte conjunto de comandos foi originalmente executado a partir de um tradicional script, não executá-los em uma linha com duplo e comercial ou outra maneira similar ".

Eu me pergunto o que os especialistas dizem - A linha bash shebang realmente é totalmente redundante ao usar um aqui-doc?

    
por JohnDoea 31.12.2016 / 12:21

1 resposta

6

Sim, neste caso.

Resumo: A linha hash-bang (também chamada de "shebang" e outras coisas) só é necessária se estiver em um script executável sem especificar explicitamente seu interpretador (da mesma forma que ao executar um arquivo executável binário). / p>

No caso do seu código, você está executando explicitamente o script no documento here com bash . Não há necessidade de adicionar o hash-bang, pois ele será tratado como um comentário.

Como o script here-document parece querer ser executado com a opção -x (a julgar em #!/bin/bash -x ), você terá que usar set -x dentro do documento here para obter o mesmo efeito de se executando o here-document como seu próprio script, novamente, porque o hash-bang é tratado como um comentário.

A linha hash-bang é usada ao executar um arquivo de texto executável. A linha informa ao sistema qual interpretador usar para executá-lo e, opcionalmente, permite que você especifique um argumento para esse interpretador ( -x no seu caso).

Você faz precisa do hash-bang se estiver escrevendo o documento here em um arquivo que será usado posteriormente como um script. Por exemplo:

cat >myscript.sh <<<END_OF_SCRIPT
#!/bin/bash
# contents of script
# goes here
END_OF_SCRIPT

Esse arquivo também precisa ser executado como executável ( chmod +x myscript.sh ). Mas, novamente, se você explicitamente executasse esse script com bash , por exemplo, por meio de

$ bash ./myscript.sh

ou

$ bash -x ./myscript.sh

(ou de forma equivalente a partir de outro script), então não é necessário hash-bang e o script não precisa ser executado.

Tudo se resume a como você deseja executar o script.

Veja também a entrada da Wikipedia para Shebang .

    
por 31.12.2016 / 12:31