Como descobrir, de dentro de um script de bash, o caminho em que o script está em
- 4308
- 1311
- Leroy Lebsack
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
PWDO 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
| 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
- « O que é DMESG no Linux, e como faço para usá -lo?
- Mint 20 melhor que o Ubuntu e o Microsoft Windows? »