Obtenha o caminho absoluto de um script em Bash

Obtenha o caminho absoluto de um script em Bash
Um caminho é um local para um diretório ou um arquivo. Existem dois tipos distintos de caminhos no Linux - absoluto e relativo. O caminho relativo é determinado usando o diretório de trabalho atual. Por outro lado, o caminho absoluto é o caminho completo para um arquivo ou diretório. O caminho completo, em particular, é especificado no diretório raiz. Uma maneira fácil de lembrar que é usando o /. Um caminho relativo não começa com A / (a ​​pasta raiz). Neste tutorial, aprenderemos a conseguir o caminho absoluto de um script em Bash.

Caminho absoluto

Para começar, vamos criar um diretório simples, subdiretos e arquivos.

Neste exemplo, se o Linuxhint for nosso diretório de trabalho atual, o caminho absoluto do script de arquivo.sh é:

/home/kalyani/desktop/linuxhint/project2/script.sh

Nosso caminho relativo é:

Projeto2/Script.sh

O que você pode notar aqui é que, para recuperar o arquivo chamado script.Sh, se tivermos um caminho absoluto, podemos recuperá -lo de qualquer lugar do ecossistema Linux. Nosso caminho relativo não é tão flexível; Por outro lado, depende do diretório de trabalho atual. No caso anterior, se estivéssemos no diretório Linuxhint, e era o nosso diretório de trabalho atual, depois acessar o script.SH, teríamos que digitar o Project2/Script.sh. Observe como não há / no início do caminho relativo.

Nosso objetivo é recuperar o endereço ou caminho completo do script (caminho absoluto).sh deu um caminho relativo.

Readlink

Um comando que você pode usar para capturar o endereço completo de um arquivo ou um executável é o ReadLink. O ReadLink é normalmente usado para capturar o caminho de um link simbólico ou um arquivo canônico. No entanto, o ReadLink também pode calcular o caminho absoluto, dado um caminho relativo. Em todos os casos, você precisará anexar uma bandeira para readlink. A bandeira mais usada nesses casos é a bandeira F.

Exemplo #1 - Readlink usando a bandeira F

roteiro.sh
#!/BIN/BASH
caminho = 'readlink -f “$ Bash_source: -$ 0”'
DIR_PATH = 'Dirname $ PATH'
eco 'o caminho absoluto é' $ caminho
eco '---------------------------------------------'
eco 'o caminho do diretório é' $ dir_path

Normalmente, US $ 0 é usado para obter o caminho do script; No entanto, isso nem sempre funciona. Portanto, uma maneira mais confiável ou robusta de obter o caminho relativo do script é usando $ Bash_source:-$ 0.

Suponha que, por uma instância, escrevo echo $ Bash_source:-$ 0, o resultado que recebo é ./roteiro.sh. Este é o caminho não absoluto para o nosso arquivo de script atual. Ou seja, a localização do script que está sendo executada é armazenada em $ Bash_source:-$ 0.

Uma vez que buscamos de forma confiável o caminho do roteiro, podemos passá -lo para readlink com a bandeira F. Podemos posteriormente usar o comando Dirname para buscar o caminho do diretório. O comando Dirname omitirá o último valor do caminho e retornará o resto.

Portanto, se tivermos um caminho de/home/kalyani/desktop/linuxhint/Project2/script.SH, e aplicamos o Dirname, vamos obter/home/kalyani/desktop/linuxhint/Project2. Isso retirou o nome da base ou o nome do roteiro do endereço ou caminho.

Realpath

Outro comando que pode ser usado é o Realpath. RealPath é um comando Linux usado para imprimir o nome de arquivo absoluto resolvido. Requer que todos os componentes existam, exceto para o último componente.

roteiro.sh
#!/BIN/BASH
Path = $ (RealPath “$ Bash_source:-$ 0”)
eco 'o caminho absoluto é' $ caminho
eco '-----------------------------------'
DIR_PATH = $ (Dirname $ PATH)
eco 'o caminho do diretório é' $ dpath

Aqui, mais uma vez, temos o caminho do script usando $ Bash_source:-$ 0. RealPath buscará o caminho completo para você, e o Dirname terá tudo, exceto o último valor do caminho absoluto.

Alternativa #1

Agora suponha que você não tenha o privilégio de usar o RealPath ou ReadLink. Não vem com todos os sistemas Linux! Eu tive a sorte de estar usando o Ubuntu e, portanto, poderia acessar. No entanto, um longo caminho para fazer a mesma coisa é o seguinte:

roteiro.sh
#!/BIN/BASH
DIR_PATH = $ (CD $ (Dirname “$ Bash_source:-$ 0”) && PWD)
Path = $ dir_path/$ (nome de base “$ Bash_source:-$ 0”)
eco 'o caminho absoluto é' $ caminho
eco '----------------------------------'
eco 'o caminho do diretório é' $ dir_path

Nesse caso, primeiro, precisamos do caminho do script atual e, a partir dele, usamos o Dirname para obter o caminho do diretório do arquivo de script. Depois de termos isso, CD na pasta e imprimimos o diretório de trabalho. Para obter o caminho completo ou absoluto, anexamos o nome da base do arquivo de script ao caminho do diretório ou $ dir_path.

Recuperando o caminho de outro script (além de si mesmo)

Nos exemplos anteriores, recuperamos os caminhos absolutos e de diretório do próprio arquivo de script. E se quiséssemos recuperar os caminhos absolutos e de diretório de um arquivo que não seja o script em que estamos trabalhando (além de si mesmo)?

Então, aqui, criamos um novo arquivo chamado Script2.sh, e gostaríamos de obter os caminhos absolutos e de diretório do script2.sh.

No script.Sh:

roteiro.sh
#!/BIN/BASH
caminho = $ (script2 real2.sh)
eco 'o caminho absoluto é' $ caminho
eco '-----------------------------------'
DIR_PATH = $ (Dirname $ PATH)
eco 'o caminho do diretório é' $ dpath

Qualquer um dos métodos anteriores deve funcionar aqui também. No entanto, aqui, usaremos o caminho relativo do script2.SH para recuperar o caminho absoluto.

Recuperando o caminho de um comando

Agora, você pode obter os caminhos absolutos e de diretório de qualquer script que desejar e os comandos. Vamos supor por um momento que queremos obter os caminhos absolutos e de diretório do comando ls. Nós escrevíamos:

roteiro.sh
#!/BIN/BASH
caminho = $ (que ls)
eco 'o caminho absoluto é' $ caminho
eco '-----------------------------------'
DIR_PATH = $ (Dirname $ PATH)
eco 'o caminho do diretório é' $ dir_path

Um caminho é um endereço usado para localizar um arquivo ou uma pasta. Um caminho absoluto é um endereço ou local completo de modo que, não importa onde você esteja, você pode recuperar o arquivo que deseja. Por outro lado, um caminho relativo é determinado em relação ao diretório de trabalho atual. Em Bash, existem várias maneiras de recuperar o endereço completo de um script. Em particular, podemos usar o RealPath, ReadLink ou até mesmo criar nosso pequeno script personalizado. Quando queremos conhecer o caminho do diretório, podemos usar o comando Dirname em nosso script Bash para recuperar nosso caminho de diretório. É bastante fácil obter o endereço completo usando um endereço relativo.

Codificação feliz!