Como Executar Scripts via Terminal do Linux?

Para que possamos tratar sobre a execução de scripts via terminal, primeiro precisamos ter um em mãos. Você provavelmente já deve ter um script e está buscando informações sobre como executá-lo na linha de comando. Abaixo, vou criar um bem simples para servir de exemplo.

Criando um Pequeno Script de Exemplo

Eu tenho o hábito de criar scripts para fazer tarefas repetitivas de forma a digitar menos código e simplificar as coisas. Um exemplo é que nas distribuições Linux baseadas em Debian, todas as vezes em que precisamos atualizar o sistema, temos que atualizar a lista de repositórios do apt, antes de atualizar os pacotes. Ou seja, executamos dois comandos para uma única tarefa.

A ideia é que eu simplesmente digite "atualizar-sistema" no terminal e um script faça o trabalho para mim.

Então vamos lá, criar esse script. Vou abrir um editor de textos do Linux chamado gedit pelo terminal, em segundo plano para que o terminal fique livre, já criando o arquivo atualizar-sistema com o seguinte comando:

gedit atualizar-sistema &
Abrir gedit em segundo plano criando arquivo no terminal do Linux.

Os dois comandos que farão o serviço são: sudo apt-get update para atualizar a lista de repositórios e sudo apt-get upgrade que, de fato, atualiza o sistema.

Script criado no gedit.

Vou salvar, Ctrl + S e agora é só executar.

Executar Script com Dash

No Ubuntu, o interpretador de comandos padrão é o dash. Então eu vou, através do terminal, pedir para ele interpretar os comandos que estão no meu arquivo. A sintaxe para isso é a seguinte:

sh nome-do-script
Executar script com sh.

Executando Scripts que já Possuem Permissão

Se eu não quiser utilizar o prefixo sh para executar o script, preciso conferir a ele permissão de execução através da seguinte sintaxe:

chmod +x atualizar-sistema

Agora já podemos executar o script sem a necessidade do sh. Mas ainda precisamos indicar o seu caminho, pois o sistema ainda não sabe onde ele se encontra.

O script está no diretório atual que é representado por um ponto. Então passo a instrução ao sistema para que, a partir do diretório atual . acesse o arquivo atualizar-sistema.

./atualizar-sistema
Executar script passando sua localização para o terminal do Linux.

Executar Scripts sem Preocupar-se com sua Localização

Mas eu quero poder simplesmente digitar atualizar-sistema, sem ter que me preocupar com a localização desse arquivo.

Isso é possível porque existe uma variável de ambiente no sistema chamada PATH, com a informação de todos os diretórios que contêm scripts executáveis e, quando digitamos um comando no terminal, essa variável é consultada a fim de localizar o script em um desses diretórios.

Com o comando echo $PATH, podemos pedir para o sistema imprimir o conteúdo dessa variável. E você vai ver que são vários caminhos, todos eles separados por dois pontos.

Imprimindo o conteúdo da variável PATH.

Podemos então pensar em colocar nosso script dentro de um desses diretórios. Afinal, é ali que o sistema está procurando por executáveis. Mas misturar nossos scripts com os do sistema em geral não seria a melhor prática.

Existe também o comando which, que ao ser executado nos devolve o caminho do arquivo que de fato vai ser acionado quando executarmos um programa específico.

Se fizermos which firefox por exemplo, vamos ter como resposta /usr/bin/firefox, da mesma forma se executamos gedit, e assim por diante.

Comando which executado no terminal do Linux.

Então outra opção seria colocar nosso script nesse diretório. Mas, o diretório /usr/bin tem a finalidade de hospedar os executáveis que devem estar disponíveis para todos os usuários. Se esse for o seu objetivo, vá em frente.

Eu vou optar por deixar o script disponível apenas para o meu usuário. Existem algumas formas de se fazer isso, mas eu vou criar a minha própria pasta que conterá os meus scripts e adicionar o caminho dessa pasta ao PATH, para que o sistema possa encontrar os scripts que estiverem dentro dela.

Primeiro então vou criar um diretório chamado bin na pasta do meu usuário com o comando mkdir bin, depois mover o script que criamos para dentro desse diretório recém-criado digitando mv atualizar-sistema bin.

E agora adicionar o nosso diretório bin na variável PATH. Ou seja, exportar export para a variável PATH o conteúdo da própria variável $PATH junto : com nosso diretório /home/airton/bin:

export PATH=$PATH:/home/airton/bin

Agora então conseguimos executar nosso script de qualquer parte do sistema, bastando para isso, digitar atualizar-sistema que o script é chamado.

Mas as alterações que fizemos na variável PATH com o export são perdidas quando fechamos essa instância do terminal e abrimos outra.

Para resolver isso, podemos pensar no seguinte:

Quando iniciamos uma instância do terminal, é lido um arquivo oculto chamado .bashrc que se encontra no diretório home do nosso usuário. O .bashrc é único para cada usuário, o que nos permite customizar o terminal para um determinado usuário editando esse arquivo.

Vou abri-lo com o gedit gedit .bashrc & e no final do documento, adicionar a mesma instrução que passei acima quando alterei temporariamente o PATH.

Editando arquivo .bashrc no gedit.

Como o arquivo .bashrc é único para cada usuário, esse comando só funcionará para o nosso usuário. Se quisermos que ele seja utilizado por todos os usuários, podemos adicionar essa linha no arquivo /etc/profile.

Agora você pode estar se perguntando, se o meu objetivo for disponibilizar o script para todos os usuários, qual é a diferença entre colocá-lo em um daqueles diretórios listados no PATH acima ou adicionar o caminho da nossa pasta bin no arquivo profile?

Bom, a primeira opção torna o script disponível também para outros programas o acessarem, pois não é somente o terminal que busca por executaveis nos caminhos de pasta que estão mapeados na variável PATH. Já a segunda opção, vai tornar o script disponível para todos os usuários porém só no terminal, porque o profile configura o terminal no que diz respeito ao que é comum a todos os usuários do sistema.

Ir para o topo