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?
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.
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á.
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.
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.