Como descobrir, de dentro de um script de bash, o caminho em que o script está em

Como descobrir, de dentro de um script de bash, o caminho em que o script está em

Quando você desenvolve scripts de bash complexos e começa a colocar vários scripts em uma pasta, onde um script interage com outro por, por exemplo, iniciando -o rapidamente, é necessário garantir que soubessem que o caminho foi iniciado, para que possamos iniciar o outros scripts com um nome de caminho totalmente qualificado. Isso é importante porque o primeiro script pode ter sido iniciado de fora do diretório do roteiro. Também poderíamos ter feito isso usando um caminho relativo, então mesmo - de alguma forma - lendo o comando que iniciou o script atual não funcionará.

Neste tutorial, você aprenderá:

  • O que PWD O comando é e o que faz
  • Como descobrir de dentro de um script de bash que caminho esse mesmo está em
Como descobrir, de dentro de um script de bash, o caminho em que o script está em

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição Linux
Programas Linha de comando Bash, sistema baseado em Linux
Outro Qualquer utilidade que não esteja incluída no shell bash por padrão pode ser instalada usando sudo apt-get install utility-name (ou yum install para sistemas baseados em redhat)
Convenções # - requer que o Linux -Commands seja executado com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

O que é PWD?

O PWD O comando em Linux retorna o Diretório de trabalho do caminho quando executado. Qualquer que seja o caminho em que nos encontramos e navegamos anteriormente (ou fomos colocados por nosso sistema operacional, como, por exemplo, quando abrirmos um prompt de comando/terminal), será o que é retornado quando executarmos PWD.

$ CD / $ PWD / $ CD / HOME $ PWD / Home 


Aqui, mudamos para o diretório raiz (/) e executado PWD. Nosso caminho atual era o diretório raiz, então / é devolvido. Nós então mudamos para o /lar diretório e executado PWD de novo. O caminho retornado é agora /lar.

Dentro de um script Bash, o PWD O comando funcionará da mesma maneira. Também é digno de nota saber que de dentro de um script bash (e na linha de comando também fora de um script bash), podemos usar a variável do sistema operacional especial $ Pwd que será mantido automaticamente atualizado pelo sistema operacional para conter nosso caminho atual. Isso nos evita de ter que fazer algo como chamar uma subshell, eu.e. Mypath = "$ (PWD)" não é necessário, podemos simplesmente invocar o $ Pwd variável.

Para que possamos usar o PWD, certo?

Não exatamente. Imagine a seguinte situação:

$ touch 'mypath.sh '$ echo'#!/bin/bash '>> mypath.sh $ echo 'echo $ pwd' >> mypath.sh $ chmod +x mypath.sh 

Aqui definimos um script chamado meu caminho.sh e o fez executável. Em seguida, pulamos um diretório do nosso diretório doméstico e executamos nosso script:

$ PWD /Home /Roel $ CD… $ ./roel/mypath.sh /home 

Considerando que a PWD comando dentro do nosso meu caminho.sh O script está funcionando corretamente, há um problema aqui: PWD devolveu o caminho em que nos encontramos atualmente, ou seja, /lar enquanto o script é realmente armazenado no /Home/Roel diretório!

Lembre -se do título do artigo; Estamos procurando o caminho em que o script está armazenado em! Então, como podemos encontrar isso?

O método!

Considerando que não há variável especial no Bash para cobrir o caminho em que o script está armazenado, há um método simples para obtê -lo.

$ cd - /home /roel $ touch 'mypath2.sh '$ echo'#!/bin/bash '>> mypath2.sh $ echo 'mypath = "$ (cd" $ (dirname \ $ 0) "&& pwd)"' >> mypath2.sh $ echo 'echo "$ mypath"' >> mypath2.sh $ chmod +x mypath2.sh 


Aqui definimos um script secundário nomeado mypath2.sh. Dentro dele, colocamos um pequeno código especial ($ (CD "$ (Dirname \ $ 0)"; && PWD)) que encontrará o caminho em que o script está (mudando para o diretório, com base no \ $ 0 variável (que é o nome do script da maneira como chamamos, eu.e. Usando um caminho relativo ou totalmente qualificado) e solicitando o Dirname para ele (por referência, e observe que ainda pode ser um caminho relativo se o script foi iniciado usando um caminho relativo) e depois mudar para ele (através do cd) e subsequentemente solicitando o PWD (Diretório de trabalho do caminho) para o mesmo, dando -nos o caminho totalmente qualificado.

Vamos ver se isso funciona mais corretamente do que apenas usar PWD:

$ CD… $ PWD /Home $ ./home/mypath2.Sh /Home /Roel 

O script funciona corretamente, e embora mypath2.sh foi relativamente chamado, de fora do diretório de onde reside o script, a saída retornada refletiu corretamente as informações solicitadas; O caminho onde o script existe. Nós armazenamos o mesmo no $ Mypath variável, e essa variável agora pode ser usada para, por exemplo $ Mypath/Algumscript.sh onde Algumscript.sh é outro script no mesmo diretório que mypath2.sh

Conclusão

Neste artigo, primeiro olhamos PWD E se isso cumpriria o problema em questão, descobrindo o caminho que nosso script reside, o tempo todo. Enquanto PWD pode funcionar se não mudarmos de diretórios, não funcionará corretamente se estivermos fora do caminho em que o script está dentro. Em seguida, introduzimos um pequeno pedaço de código (Mypath = "$ (CD" $ (Dirname \ $ 0) "&& PWD)" que sempre retornará o diretório que nosso script está corretamente.

Um pequeno pedaço de código, mas uma grande solução para o nosso problema de codificação de scripts bash! Aproveitar!

Tutoriais do Linux relacionados:

  • Pasta zip no linux
  • Como mover a pasta no Linux
  • Como verificar o uso do disco por pasta no Linux
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para instalar no Ubuntu 20.04
  • Como criar arquivos criptografados compactados com alcatrão e gpg
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Sistema Linux Hung? Como escapar para a linha de comando e…
  • Mastering Bash Script Loops
  • Exemplos úteis de linha de comando Bash e truques - Parte 4