Por que há uma palavra-chave bash antes de alguns heredocs?

3

Em alguns heredocs, você vê a palavra-chave bash antes do abridor (< <), o nome e o descritor de arquivo. Por exemplo:

bash /dev/fd/10 10<<'SES'

Por que o Bash está lá? Quer dizer, nós já trabalhamos no Bash, e não é como cat usado para exibir o texto e, em seguida, redirecioná-lo para outro arquivo como em cat << EOT >> /file.txt , por isso pergunto como calouro, porque precisamos da palavra-chave bash lá.

    
por JohnDoea 22.03.2017 / 17:35

1 resposta

3

bash não existe uma palavra-chave, é um comando que está sendo executado. Está sendo passado o argumento /dev/fd/10 . O shell executando o script (que pode ou não ser bash) está configurando um heredoc para ser lido a partir do descritor de arquivo 10.

Então, o bash está sendo chamado para executar o heredoc como um script de shell. É semelhante a se a linha ler bash /path/to/script.sh - nesse caso, o script está vindo de um heredoc.

Por que alguém fez isso (ao invés de usar apenas ( commands ) é impossível responder sem o contexto (e possivelmente a história também). Um palpite (como DopeGhoti sugere) é que o roteiro pode ser executado sob um shell diferente, e esse bit requer bash. Outra possibilidade é que o autor do script simplesmente não conhece os métodos alternativos.

Por que o FD 10 é usado em vez de stdin, pode ser porque o bloco de script também precisa ler o stdin.

    
por 22.03.2017 / 18:22