Que signifie «[[$ -! = * I *]] && return»?

22

J'ai cette ligne dans ma main .bashrcet j'aimerais savoir ce que cela signifie exactement

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Severus Tux
la source

Réponses:

33
  • $- signifie «drapeaux actuels».
  • echo $-renvoie "himBH". Ce sont tous des défauts.
  • donc ... [[ $- != *i* ]] && returnfait en fait ce qu'il dit ci-dessus dans un commentaire: il vérifie si l'indicateur interactif est défini. Le [[et]] en font un booléen pour qu'il finisse dans un "vrai" ou "faux". "false && return" le fait continuer "true && return" le fait exécuter le retour.

Les drapeaux par défaut expliqués plus en détail:

h est pour "hash all": cela indique à bash de se souvenir des emplacements des commandes qu'il a trouvées en interrogeant votre PATH.

i est pour "interactif": entrer une entrée et récupérer une sortie.

m est pour "moniteur": cela permet de contrôler le travail

B est pour "brace expand". Cela vous permet d'utiliser l'expansion de l'accolade

H est pour "l'histoire se développer". C'est ce qui vous permet de réexécuter une commande à partir de votre historique en faisant précéder son numéro d'un point d'exclamation


Au fait. J'ai ...

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Fait essentiellement la même chose mais plus facile à lire, je suppose.

Rinzwind
la source
6

Fondamentalement, cela signifie "Si les drapeaux du shell ne contiennent pas de i minuscule, arrêtez la fonction / le script ici".

[[ ]]

dénote une expression conditionnelle en bash

$-

signifie les drapeaux shell. Il contiendra "i" si le shell est interactif (c'est-à-dire que vous pouvez taper des commandes, par opposition à, c'est exécuter un script)

!=

signifie simplement "différent de".

*i*

est un motif générique qui correspond à tout ce qui contient "i"

return

sans aucun argument signifie simplement arrêter l'exécution de la fonction ou du script en cours.

&&

est l' opérateur logique ET . L'expression de droite, dans ce cas return, ne sera évaluée (exécutée) que si l'expression de gauche est vraie . Donc, dans de nombreux langages de programmation, a && best un raccourci pour if a then b- cela s'appelle "évaluation de court-circuit" et cela rend les enseignants de programmation fous lorsque vous l'utilisez: D

delt
la source
2

Je suppose que c'est comme il est dit: si bash n'est pas ouvert dans un shell interactif, alors ne faites rien.

Je ne connais pas toute la fonction, mais il y a probablement des commandes et des drapeaux en dessous de cette ligne au cas où vous auriez bash ouvert dans un ATS.

Le vagabond
la source
merci :) mais je suis impatient de savoir ce qui est exactement $-et *i*et comment il savoir si son mode interactif ou non
Severus Tux