O que esta linha de script de shell faz?

1

ls "$ {VMX_DIR}" | grep -q delta & gt; / dev / null 2 ​​& gt; & amp; 1;

Ele lista os arquivos em VMX_DIR e os canaliza para o grep, mas o que ele está fazendo?

t123
fonte

Respostas:

4

Está verificando se existe um arquivo ou caminho contendo delta em ${VMX_DIR} em seguida, retorna o resultado através do código de saída do grep, pois o grep retornará com um código de saída normal de 0, se ele encontrar uma correspondência, e um código de falha de 1, se não encontrar. É útil em condicionais bash.

Aqui está o que está fazendo declaração por declaração:

ls "$ {VMX_DIR}"

Lista o conteúdo do diretório armazenado no caminho ${VMX_DIR}

| grep -q delta

Canalize os resultados para grep, pesquisando os resultados da listagem de diretórios delta ignorando qualquer saída para stout.

& gt; / dev / null 2 ​​& gt; & amp; 1;

Redireciona stdout para /dev/null por isso não será impresso. o 2>&1 diz bash para redirecionar stderr para stdout (que agora vai /dev/null ). O ponto e vírgula apenas termina a linha.

David Ma
fonte
2

De grep página man:

   -q, --quiet, --silent
          Quiet;  do  not write anything to standard output.  Exit immedi-
          ately with zero status if any match is found, even if  an  error
          was detected.  Also see the -s or --no-messages option.

Basicamente, isso está olhando para ver se há um nome de arquivo contendo delta e retornando true se houver ou false se não houver. O que está realmente fazendo com esse valor de verdade é que ninguém adivinha de que pequeno trecho você tem lá.

Majenko
fonte
0

Parece que ele serve apenas para detectar se a palavra 'delta' está na lista, caso em que retornará 0, caso contrário, retornará 1. Então, com base no valor de retorno, você sabe se o delta estava lá ou não.

steabert
fonte
0

A última parte redireciona saída padrão e erro padrão para / dev / null - Ou seja, qualquer saída do comando grep (erros, avisos ou correspondências) é descartada. Esse tipo de comando pode ser útil para fazer uma simples verificação sem saída - O $? variável será zero ou diferente de zero, dependendo se o grep bem sucedido ou não.

Você poderia simplificar esse código substituindo > /dev/null 2>&1 com &>/dev/null, que neste caso fará o mesmo: Redirecionar todos os fluxos de saída para /dev/null.

Vejo Redirecionamento de E / S para detalhes.

l0b0
fonte