J'ai cette ligne dans ma main .bashrc
et j'aimerais savoir ce que cela signifie exactement
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
la source
J'ai cette ligne dans ma main .bashrc
et j'aimerais savoir ce que cela signifie exactement
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
$-
signifie «drapeaux actuels».echo $-
renvoie "himBH". Ce sont tous des défauts.[[ $- != *i* ]] && return
fait 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.
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 && b
est 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
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.
$-
et*i*
et comment il savoir si son mode interactif ou non