Cosa fa questa linea di script di shell?


1

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

Elenca i file in VMX_DIR e poi li canalizza in grep ma cosa sta facendo?

Risposte:


4

Sta controllando per vedere se c'è un file o percorso contenente delta nel ${VMX_DIR} quindi restituisce il risultato tramite il codice di uscita di grep poiché grep ritornerà con un normale codice di uscita di 0 se trova una corrispondenza e il codice di errore di 1 se non lo fa. È utile in condizioni basali.

Ecco cosa sta facendo dichiarazione per dichiarazione:

ls "$ {VMX_DIR}"

Elenca il contenuto della directory memorizzata nel percorso ${VMX_DIR}

| grep -q delta

Conduci i risultati a grep, cercando i risultati dell'elenco di directory delta ignorando qualsiasi uscita in stout.

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

Reindirizza lo stdout a /dev/null quindi non verrà stampato Il 2>&1 dice a bash di reindirizzare stderr su stdout (che ora sta per /dev/null ). Il punto e virgola termina semplicemente la linea.


2

Dal grep pagina 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.

Fondamentalmente questo sta cercando di vedere se c'è un nome di file contenente delta e ritorno true se c'è o false se non c'è. Quello che sta effettivamente facendo con quel valore di verità è la supposizione di chiunque da quel piccolo frammento che hai lì.


0

Sembra che sia pensato solo per rilevare se la parola 'delta' è nella lista, nel qual caso restituirà 0, altrimenti restituirà 1. Quindi, in base al valore di ritorno, sai se il delta era presente o meno.


0

L'ultima parte reindirizza uscita standard e errore standard a / Dev / null - I.e, qualsiasi output del comando grep (errori, avvisi o corrispondenze) viene eliminato. Questo tipo di comando può essere utile per fare un semplice controllo senza output - The $? la variabile sarà zero o diversa da zero a seconda che il grep riuscito o no.

Potresti semplificare questo codice sostituendo > /dev/null 2>&1 con &>/dev/null, che in questo caso farà la stessa cosa: reindirizza tutti i flussi di output a /dev/null.

Vedere Reindirizzamento I / O per dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.