Che cosa significa "[[$ -! = * i *]] && return"?

20

Ho questa riga nel mio .bashrc e vorrei sapere cosa significa esattamente

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
    
posta Severus Tux 24.09.2016 - 15:18

3 risposte

32
  • $- significa "flag correnti".
  • echo $- restituisce "himBH". Sono tutti predefiniti.
  • così ... [[ $- != *i* ]] && return effettivamente fa quello che dice sopra in un commento: controlla se il flag interattivo è impostato. Il [[e]] lo rendono un booleano così finisce in un "vero" o "falso". "false & amp; return" fa andare avanti "true & amp; & amp; return" fa eseguire il reso.

I flag predefiniti spiegati in maggior dettaglio:

h è per "hash all": questo dice a bash di ricordare le posizioni dei comandi che ha trovato attraverso l'interrogazione del PERCORSO.

i è per "interattivo": inserimento di input & amp; tornare all'output.

m è per "monitor": questo abilita il controllo del lavoro

B sta per "brace expand". Ciò ti consente di utilizzare l'espansione delle bretelle

H sta per "history expand". Questo è ciò che ti permette di rieseguire un comando dalla tua storia inserendo il suo numero in un punto esclamativo

A proposito. Ho ...

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

Fondamentalmente fa la stessa cosa ma è più facile da leggere.

    
risposta data Rinzwind 24.09.2016 - 15:32
6

Fondamentalmente significa "Se i flag della shell non contengono una i minuscola, quindi interrompi qui la funzione / lo script".

[[ ]]

denota un'espressione condizionale in bash

$-

significa i flag di shell. Conterrà "i" se la shell è interattiva (cioè puoi digitare comandi, al contrario, è in esecuzione uno script)

!=

significa semplicemente "non uguale a".

*i*

è un modello jolly che corrisponde a qualsiasi cosa contenga "i"

return

senza argomenti significa solo interrompere l'esecuzione della funzione o dello script corrente.

&&

è l'operatore logico AND . L'espressione a destra, in questo caso return , verrà valutata solo (eseguita) se l'espressione a sinistra è true . Quindi in molti linguaggi di programmazione, a && b è una scorciatoia per if a then b - questo è chiamato "valutazione di cortocircuito" e fa impazzire gli insegnanti di programmazione quando lo si usa: D

    
risposta data delt 27.09.2016 - 19:34
2

Suppongo che sia come dice: se bash non è aperto in una shell interattiva, allora non fare nulla.

Non conosco l'intera funzione, ma probabilmente ci sono comandi e flag impostati sotto quella linea nel caso in cui tu abbia aperto bash in un TTY.

    
risposta data TheWanderer 24.09.2016 - 15:20

Leggi altre domande sui tag