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

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.


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


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.