Recuperando o diretório onde o script está sendo executado (Linux/Bash)

No último post, mostrei como recuperar argumentos passados via linha de comando. Neste post vou mostrar como salvar em uma variável o diretório em que o script executado está armazenado. É um processo simples, mas tem um detalhe importante que pode fazer toda a diferença no seu script.

Como demonstrei no último script, a variável $0 ($ zero) mostra o diretório do script mas, na verdade, ela mostra o caminho que você utilizou para executar o script e isso faz toda a diferença.

Dois exemplos para demonstrar o que estou falando.

 

 

Extraindo o caminho + nome do script

Se você executar um script desta forma:

A variável $0 vai ter o valor: ./script.sh

Se você executar o script desta forma:

A variável $0 vai ter o valor: /scripts/foo/bar/script.sh

 

 

Extraindo o diretório do caminho completo do script

Esta parte é bem simples, basta utilizar a função dirname:

No exemplo acima, a variável diretorio vai receber a parte do conteúdo de “$0” que contém o diretório.

Atenção para os detalhes:

Com este comando, a variável diretorio vai possuir o valor “.” (ponto). Todavia, se utilizarmos o comando:

Neste caso, a variável vai ter o valor: “/scripts/foo/bar”.

 

Sendo assim, você deve tomar cuidado quando executar um script e precisar da referência do diretório onde ele está armazenado.  Especialmente se você trocar o diretório durante a execução do script.

Para ajudar neste ponto, podemos processar o valor retornado pela função dirname.

 

 

Processando valor retornado pela função dirname

Podemos fazer uma verificação simples para armazenar o caminho do script. Para isso, vamos expandir um pouco o exemplo anterior:

Na primeira linha do código acima, recupero o diretorio da variável $0. Depois faço uma comparação para ver se o valor desta variável é igual a “.” (ponto). Se for, o script utiliza a função pwd para recuperar o caminho atual e o armazena na variável diretorio.

Desta forma, a variável diretorio sempre vai possuir o diretorio completo do script que está sendo executado e você pode utilizar esta referencia durante toda execução do seu script.

 

Espero ter ajudado.

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, Linux/Bash and tagged , , , , , .