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


22

Ho questa linea nel mio .bashrce vorrei sapere cosa significa esattamente questo

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

Risposte:


33
  • $- significa "flag correnti".
  • echo $-restituisce "himBH". Sono tutti valori predefiniti.
  • quindi ... in [[ $- != *i* ]] && returnrealtà fa quello che dice sopra in un commento: controlla se il flag interattivo è impostato. Il [[e]] lo rendono un valore booleano quindi finisce in un "vero" o "falso". "false && return" lo fa andare su "true && return" lo fa eseguire il ritorno.

I flag predefiniti sono spiegati in modo più dettagliato:

h sta per "hash all": questo dice a bash di ricordare le posizioni dei comandi che ha trovato interrogando il tuo PERCORSO.

sto per "interattivo": inserire input e recuperare output.

m sta per "monitor": abilita il controllo del lavoro

B sta per "parentesi graffa espandibile". Ciò consente di utilizzare l'espansione del controvento

H sta per "espansione della storia". Questo è ciò che ti consente di rieseguire un comando dalla tua cronologia precedendo il suo numero con un punto esclamativo


A proposito. Io ho ...

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

Fondamentalmente fa lo stesso ma presumo più facile da leggere.


6

Fondamentalmente significa "Se i flag di shell non contengono una i minuscola, interrompere qui la funzione / script".

[[ ]]

denota un'espressione condizionale in bash

$-

indica i flag di shell. Conterrà "i" se la shell è interattiva (es. Puoi digitare i comandi, al contrario, sta eseguendo uno script)

!=

significa semplicemente "non uguale a".

*i*

è un modello jolly che corrisponde a tutto ciò che contiene "i"

return

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

&&

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


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 tu abbia bash aperto in un TTY.


grazie :) ma non vedo l'ora di sapere che cosa è esattamente $-e *i*e come scoprire se il suo modo interattivo o no
Severo Tux

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.