1 votes

Que fait cette ligne de script shell ?

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

Il répertorie les fichiers dans VMX_DIR, puis les redirige vers grep mais qu'est-ce que cela fait?

4voto

Monroecheeseman Points 825

Cela vérifie s'il existe un fichier ou un chemin contenant delta dans ${VMX_DIR} puis renvoie le résultat via le code de sortie de grep, car grep renverra un code de sortie normal de 0 s'il trouve une correspondance, et un code d'échec de 1 s'il ne le fait pas. C'est utile dans les conditionnels bash.

Voici ce qu'il fait déclaration par déclaration :

ls "${VMX_DIR}"

Liste le contenu du répertoire stocké dans le chemin ${VMX_DIR}

| grep -q delta

Pipe les résultats à grep, recherchant les résultats de la liste du répertoire pour delta en ignorant toute sortie sur la sortie standard.

> /dev/null 2>&1;

Redirige la sortie standard vers /dev/null pour qu'elle ne soit pas imprimée. Le 2>&1 indique à bash de rediriger la sortie d'erreur vers la sortie standard (qui va maintenant vers /dev/null). Le point-virgule termine simplement la ligne.

2voto

Majenko Points 31077

De la page de manuel de grep :

   -q, --quiet, --silent
          Silencieux ; ne rien écrire sur la sortie standard. Quitter immédiatement avec un statut zéro si une correspondance est trouvée, même si une erreur a été détectée. Voir également l'option -s ou --no-messages.

Fondamentalement, cela cherche à voir s'il existe un fichier contenant delta et à renvoyer true s'il existe ou false s'il n'existe pas. Ce qu'il fait réellement avec cette valeur de vérité est à deviner à partir de ce petit extrait que vous avez là.

0voto

Nick T Points 38411

La dernière partie redirige la sortie standard et les erreurs standard vers /dev/null - c'est-à-dire que toute sortie de la commande grep (erreurs, avertissements ou correspondances) est supprimée. Ce type de commande peut être utile pour effectuer une vérification simple sans sortie - La variable $? sera zéro ou non zéro en fonction de la réussite ou non de la commande grep.

Vous pourriez simplifier ce code en remplaçant > /dev/null 2>&1 par &>/dev/null, qui dans ce cas fera la même chose : Rediriger tous les flux de sortie vers /dev/null.

Voir Redirection E/S pour plus de détails.

0voto

steabert Points 586

Il semble que cela soit destiné à simplement détecter si le mot 'delta' est dans la liste, auquel cas il retournera 0, sinon il renverra 1. Donc, en fonction de la valeur de retour, vous saurez si delta était présent ou non.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X