Mateus Müller

O carinha do Linux

14 ago. 2019

SHEBANG: Declarar o compilador em Shell Script

Provavelmente, a primeira coisa que você aprende a fazer em Shell Script é declarar qual será o compilador daquele código. Talvez, você nem saiba que está fazendo isso, mas está. Neste post, pretendo explicar um pouco como funciona isso, vantagens e também como fazer da forma correta usando a linguagem Shell Script, já que podemos utilizar isso para diversas outras linguagens.

O shebang como é conhecido, é justamente o termo usado para essa declaração, que pode ser usada em Perl, Python, Shell Script ou qualquer outro script que tenha um compilador específico.

A primeira linha de um script deve ser, obrigatoriamente, a declaração do seu compilador. Você já deve ter notado que scripts em Shell usam o “#!/bin/bash”. Isso significa que o binário Bash irá compilar o código abaixo.

Requisitos

Para obter o melhor deste artigo, recomendo:

Exemplo em Python

Para entender bem o uso do Shebang, podemos dar um exemplo em Python.

SHEBANG: Declarar o compilador em Shell Script

Na screenshot acima, pode-se notar que o meu sistema possui tanto o compilador do Python 2 e do Python 3. A versão default do meu sistema é o Python 2, pois há um link simbólico atrelado a ele.

Para forçar o meu script a ser executado com o Python 2, posso utilizar:

#!/usr/bin/python2

E para forçar o Python 3:

#!/usr/bin/python3

Veja que aqui pode acontecer um erro se usar o Python default.

#!/usr/bin/python

Se eu escrever o código usando Python 2 e usando o shebang demonstrado acima, tudo vai funcionar perfeitamente. Mas, e se alguém tiver o Python 3 como default ao invés do Python 2? Já vai quebrar o programa! É nesses casos que entra o uso correto do shebang, sempre declarando especificamente a versão.

Exemplo em Shell

Quando vamos programar em Shell Script, sempre começamos o script com:

#!/bin/bash

Veja o seguinte exemplo na prática. Primeiro, usei o compilador do Bash e depois alterei o Python para forçar um erro de sintaxe, visto que estou executando código em Shell com o compilador do Python (?)

SHEBANG: Declarar o compilador em Shell Script

Mas agora fica a pergunta, será que #!/bin/bash é a melhor forma de se declarar um compilador em Shell?

Qual a forma correta de usar o Shebang em Shell?

Veja bem… Imagine que você quer criar um script que vá funcionar em outros sistemas também baseados no Unix e que tenham o Bash instalado. Não sabemos se o Bash vai realmente estar instalado dentro do /bin, já que o outro sistema pode não seguir o FHS, ou simplesmente quis usar outro diretório, que também não está errado.

Desta forma, não podemos manter o shebang fixo, precisamos de uma alternativa dinâmica, e é aí que entra o comando env, e que geralmente está disponível em todas as outras distribuições, já que faz parte do GNU coreutils.

Isto é, ao invés de usar o comando:

#!/bin/bash

Trocamos por:

#!/usr/bin/env bash

Isso torna o nosso script portável por um grande motivo. O comando env recebe outro comando por parâmetro e vai buscar onde ele está localizado dentro de todos os diretórios da variável $PATH. Se em uma distribuição o bash está em /bin e na outra está em /usr/bin, ele vai encontrar automaticamente! Esta é a grande sacada.

Caso você queira mais informações do comando env, clique aqui para ir ao manual do GNU coreutils na seção do env.

Conclusão

Sempre que queremos criar um utilitário mais portável para outras distribuições Linux, ou até outros sistemas operacionais baseados no Unix, usamos o shebang com o comando env para maior portabilidade. Caso contrário, podemos usar o modo fixo de qualquer forma.

Bom, espero que tenha gostado dessa dica. Se gostou, não esqueça de compartilhar com os colegas em grupos de Linux. Este artigo pode ajudar muitas outras pessoas.

Me siga no Instagram onde eu faço conteúdos da minha rotina diária.

Participe dos nossos grupos no Telegram e Facebook! 🙂

Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!

Comentários Disqus