Exemplos úteis de linha de comando Bash e truques - Parte 4

Exemplos úteis de linha de comando Bash e truques - Parte 4

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
Exemplos úteis de linha de comando Bash e truques - Parte 4

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

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