web-dev-qa-db-fra.com

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

J'ai cette ligne dans mon .bashrc et j'aimerais savoir ce que cela signifie exactement

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
22
Severus Tux
  • $- signifie "drapeaux actuels".
  • echo $- renvoie "himBH". Ce sont tous des défauts.
  • so ... [[ $- != *i* ]] && return fait ce qu’il est dit ci-dessus dans un commentaire: il vérifie si le drapeau interactif est activé. Les [[et]] en font un booléen afin qu'il se termine par un "vrai" ou un "faux". "false && return" le fait passer "true && return" lui permet d'exécuter le retour.

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

h est pour "hash all": ceci indique à bash de se rappeler l'emplacement des commandes qu'il a trouvées lors de l'interrogation de 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 "attelle élargir". Cela vous permet d'utiliser l'extension

H est pour "histoire élargir". C’est ce qui vous permet de relancer une commande de votre historique en préfacant son numéro avec un point d’exclamation.


Au fait. J'ai ...

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

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

33
Rinzwind

En gros, cela signifie "Si les drapeaux du shell ne contiennent pas de lettre minuscule i, 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.-à-d. Vous pouvez taper des commandes, par opposition à, il exécute un script)

!=

signifie simplement "pas égal à".

*i*

est un modèle 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 à droite, dans ce cas returnname__, ne sera évaluée (exécutée) que si l'expression à gauche est true. Donc, dans de nombreux langages de programmation, a && b est un raccourci pour if a then b - on l'appelle "évaluation de court-circuit" et rend les professeurs de programmation fous quand vous l'utilisez: D

6
delt

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

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

2
TheWanderer