O que esta linha de script de shell faz?

1

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

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

    
por t123 10.03.2011 / 13:29

4 respostas

4

Está verificando se há um arquivo ou caminho contendo delta em ${VMX_DIR} , em seguida, retorna o resultado pelo código de saída do grep, pois o grep retornará com um código de saída normal de 0 se encontrar uma correspondência e código de falha de 1, se isso não acontecer. É ú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 para delta ignorando qualquer saída para stout.

> /dev/null 2>&1;

Redireciona a saída para /dev/null para que não seja impressa. O 2>&1 diz ao bash para redirecionar o stderr para o stdout (que agora vai para /dev/null ). O ponto-e-vírgula apenas termina a linha.

    
por 10.03.2011 / 13:58
2

Na página grep 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á tentando 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 a partir desse pequeno trecho que você tem lá.

    
por 10.03.2011 / 13:33
0

Parece que ele apenas detecta 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.

    
por 10.03.2011 / 13:34
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 verificação simples sem saída - A variável $? será zero ou diferente de zero, dependendo se o grep foi bem-sucedido ou não.

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

Consulte o redirecionamento de E / S para obter detalhes.

    
por 10.03.2011 / 13:34