Exemplos úteis de linha de comando Bash e truques - Parte 4
- 2904
- 626
- Arnold Murray
Continuando nossa série sobre dicas e truques úteis da linha de comando Bash, no artigo de hoje, exploraremos o Grepping apenas o que você precisa e começaremos com uma cartilha em PWD
e como descobrir o caminho em que um script foi iniciado.
Neste tutorial, você aprenderá:
- Dicas úteis da linha de comando Bash, truques e métodos
- Como interagir com a linha de comando Bash de maneira avançada
- Como aprimorar suas habilidades de bash em geral e se tornar um usuário de bash mais proficiente
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 |
Exemplo 1: Diretório de trabalho do caminho? Ou não?
Podemos estar acostumados a ligar PWD
Na linha de comando para nos dizer o nome do nosso diretório atual:
$ PWD/Home/Roel/Workspace
Mas se queremos obter o diretório do qual um script foi iniciado, usando essa variável de um script também funciona da mesma maneira?
$ cat test_pwd.sh #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2"
cópia de Usaremos duas maneiras de recuperar o caminho: olhamos (para o primeiro My_path1
atribuição) no PWD
(Nível do sistema operacional) variável automaticamente de prescrição e no segundo caso (para o segundo My_path2
atribuição) nós executamos PWD
em uma subshell ($ (…)
) e atribui -lo a My_path2
. Vamos executar o mesmo:
$ ./test_pwd.SH/Home/Roel/Workspace/Home/Roel/Workspace
Parece tudo de bom, certo? Sim, talvez, mas uma vez que mudamos para um diretório diferente, e chamamos o script usando seu nome de caminho completo ou relativo, o PWD
variável (ou o PWD
comando) dentro do script retornará o diretório em que estávamos quando o script foi iniciado. Vamos verificar isso:
$ mkdir teste $ cd teste $… /test_pwd.SH/Home/Roel/Workspace/Test/Home/Roel/Workspace/Teste
O que podemos ver aqui é que PWD
(ou o $ PWD
variável) sempre retornará o caminho atual real.
Isso pode ser um problema: podemos querer iniciar um subscrito ou acessar um arquivo, dentro do mesmo diretório (ou um subdiretório dele) como aquele em que o script estava em. Geralmente, esse é o caso de scripts bash mais complexos que chamam vários subscritos e/ou arquivos de dados e dados.
Então, o que é uma maneira uniforme de obter o caminho a partir do qual o script foi iniciado?
Pode -se considerar usar o Dirname "\ $ 0"
comando:
$ CAT Test2.sh #!/Bin/Bash Echo "\ $ 0" Dirname "\ $ 0"
cópia de Dirname produzirá o nome do diretório - relativo a qualquer opção passada para ele, e neste caso que é \ $ 0
- Uma variável especial definida quando um script começa com o nome do script quando foi iniciado. Vamos testar:
$ ./test2.sh ./test2.sh . $ cd teste $… /test2.sh… /test2.Sh ..
Melhor, suponho, e pode ajudar um pouco (para ter uma idéia principalmente), mas ainda não nos rende com um nome de caminho totalmente qualificado. Para isso, podemos usar um invólucro duplo de subshell ao redor Dirname
em combinação com um caminho qualificado completo real obtido de um PWD
execução:
$ cat make_it_work.sh #!/bin/bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path"
cópia de Vamos ver se funciona:
$ ./faça funcionar.SH/Home/Roel/Workspace
Até agora tudo bem, mas funciona quando você o executa de um subdiretório?
$ cd teste && pwd/home/roel/workspace/teste $…/make_it_work.sh/home/roel/workspace $/home/roel/workspace/make_it_work.SH/Home/Roel/Workspace
Sim!
Primeiro mudamos para teste
e verifique se estamos no teste
diretório, se esse diretório de alterações (cd
) O comando foi bem -sucedido (como instruído por &&
).
Nos dois casos - se é chamado de maneira relativa (... /
), ou com um nome de caminho totalmente qualificado (/Home/Roel/Workspace/
), o resultado é que vemos o diretório do qual o script foi iniciado (/Home/Roel/Workspace/
) e não o diretório de trabalho atual real, ou PWD (/Home/Roel/Workspace/teste
).
Em resumo, você pode usar o My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)"
Script de uma linha para obter o nome de diretório correto e totalmente qualificado de dentro de seus scripts. Depois disso, usar uma adição relativa funcionará bem. Por exemplo, você pode usar $ My_path/incluir/mysubscript.sh
e até mesmo $ My_path /… /one_dir_up_file.TXT
etc.
Exemplo 2: Grepping apenas o que você precisa
Você já usou grep
? Grep é um utilitário versátil de linha de comando bash que permite selecionar o texto de um arquivo facilmente. Na maioria das vezes, é usado da seguinte maneira:
$ CAT TEST LINHE 1 MINHA LINHA LINHA 2 SUAS LINHAS LINHA 3 Nossa linha $ GREP 'LINE 2' Linha de teste 2 suas linhas
Temos um arquivo de entrada com 3 linhas e procuramos um teste específico (linha 2
) nesse arquivo. Mas que tal se você deseja apenas as linhas que têm o múltiplo de linha
(eu.e. linhas
) mencionado neles? E, que tal se você quisesse ter apenas a palavra antes, incluindo o linhas
Bit, mas não o real linha x
saída?
Nesse caso, podemos grep apenas pelo que precisamos usar o -o
('somente') opção para grep:
$ grep -o 'linhas' linhas de teste $ grep -o '\ w \+ linhas' teste suas linhas
Bingo! Primeiro, gastamos apenas a palavra 'linhas', que foi encontrada. Em seguida, prefixamos isso com um espaço e uma expressão regular que afirma em pseudo-texto: encontre um limite de palavra (\c
), pelo menos uma vez e quantas vezes conforme aplicável (\+
) seguido de um espaço. O resultado é que seu
(que tem dois limites de palavras; um início e um fim) está incluído. linha 2
não está incluído. Embora tenha limites de palavras, não há sufixo de linhas
para aquele.
Se você deseja aprender mais sobre expressões regulares em Bash, consulte Bash Regexps para iniciantes com exemplos, Bash Regex avançado com exemplos e você também pode gostar das expressões regulares do Python semi-relacionadas com exemplos com exemplos.
Conclusão
Neste artigo, exploramos PWD
e vi como usar PWD
De dentro de um script em combinação com Dirname
Para recuperar o caminho de diretório totalmente qualificado a partir do qual o script foi iniciado, de uma maneira que sempre funcionará. Também olhamos para o Grepping apenas o que precisamos usar o -o
opção e, neste caso, expressão regular para corresponder aos limites das palavras.
Deixe -nos um comentário com suas melhores dicas e truques da linha de comando Bash!
- Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1
- Exemplos úteis de linha de comando bash e exemplos de truques - Parte 2
- Exemplos úteis de linha de comando BASH - Parte 3
- Exemplos úteis de linha de comando Bash e truques - Parte 4
- Exemplos úteis de linha de comando BASH - Parte 5
Tutoriais do Linux relacionados:
- Uma introdução à automação, ferramentas e técnicas do Linux
- Mastering Bash Script Loops
- Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1
- Exemplos úteis de linha de comando BASH - Parte 3
- Exemplos úteis de linha de comando bash e exemplos de truques - Parte 2
- Coisas para instalar no Ubuntu 20.04
- Loops aninhados em scripts de basquete
- Ubuntu 20.04 truques e coisas que você pode não saber
- Exemplos úteis de linha de comando BASH - Parte 5
- Ubuntu 20.04 Guia
- « Exemplos úteis de linha de comando BASH - Parte 3
- Exemplos úteis de linha de comando BASH - Parte 5 »