0
votes

Utilisation de || Après> / dev / null 2> & 1 || {sortie 1}

Je suis nouveau à Bash Scripting et j'essaie de comprendre la ligne suivante:

{ echo "kubectl pre-req is missing."; exit 1; }


0 commentaires

4 Réponses :


1
votes

Si la commande kubectl code> se ferme avec un état de sortie non zéro em>, le code après le || code> sera exécuté.

$ sh -c 'exit 42' && echo "exit status zero" || echo "exit status non-zero"
exit status non-zero

$ sh -c 'exit 0' && echo "exit status zero" || echo "exit status non-zero"
exit status zero


1 commentaires

Notez que ce n'est pas exactement si / alors / alors: si la commande entre && et || échoue, la commande après || sera exécuté.



1
votes

|| est un logique ou basé sur le code de sortie de commande précédent (0 signifie vrai et une autre valeur est fausse). < / p>

Dans ce cas, il n'exécutera que la partie ECHO lorsque le code de sortie de la première commande (kubecl ..) n'est pas 0 (I.E: échoue). La sortie 1 est de définir l'échec de la commande entière, sinon le code de sortie sera 0 à partir de la commande ECHO.


0 commentaires

2
votes

I Inomplet Cette partie: Commande -V Kubectl> / dev / null 2> & 1 code> Donc, si elle échoue ou non, nous redirigeons la sortie sur / dev / null dans laquelle si je le comprends correctement signifie que cela signifie que si je le comprends correctement signifie l'ignorer dans tous les cas. P>

Vous avez mal compris cela; Aucune partie de la commande -v kubectl> / dev / null 2> & 1 code> a une connexion à "si elle échoue" vs. "non". p>

plutôt, > code> et 2> code> rediriger deux types de sortie différents; > code> (ou 1> code>) redirige quelle que soit la commande écrit sur sortie standard em> et 2> code> redirige quelle que soit la commande Écrit sur erreur standard em>. Si la commande écrit quelque chose à la sortie standard est indépendante de savoir s'il finit par réussir ou échouer; Qu'il écrit quelque chose à une erreur standard est indépendant de savoir si cela finit par réussir ou échoué; et si cela écrit quelque chose à la sortie standard est indépendant de savoir si cela écrit quelque chose à une erreur standard. p>

Par exemple, voici une commande qui imprime à la fois une sortie standard et une erreur standard, puis renvoie avec succès avec succès: P>

( echo "this is on standard output" ; echo "this is on standard error" >&2 ; exit 1 )


1 commentaires

La commande curl (qui fait des choses comme le téléchargement de pages Web) en est un bon exemple. Par défaut, il envoie des données téléchargées sur la sortie standard et les mises à jour d'état (par exemple, téléchargez la progression) à une erreur standard. Donc, il écrit à l'erreur standard si il y a un problème. CURL utilise également son code de sortie pour indiquer si une erreur est survenue et s'il y avait une erreur, la nature générale de celui-ci (E.g. 0 = succès, 7 = Échec de la connexion à l'hôte, etc.). Supprimer les messages, avec 2> / dev / null (ou similaire) ou avec CURL 'S -s ou - -Silent option n'a aucun effet sur le code de sortie.



1
votes

|| est utilisé ou conditionner ou conditionne dans Bash.

Pour un exemple simplifié permet de regarder xxx

Que se passe-t-il est que si CMD1 réussit (c.-à-d. Code de sortie 0), puis cmd2 ne sera pas effectuée. CMD2 ne sera effectué que si cmd1 échoue.

C'est une raison pour laquelle les codes de sortie de retour sont si importants.

Pour plus de détails, veuillez regarder ce post: opérateursbools (&&, -a, ||, -o) à bash


0 commentaires