Was bedeutet "[[$ -! = * I *]] && return"?

22

Ich habe diese Zeile in meinem .bashrcund ich würde gerne wissen, was genau das bedeutet

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

Antworten:

33
  • $- bedeutet "aktuelle Flags".
  • echo $-gibt "himBH" zurück. Das sind alles Vorgaben.
  • also ... [[ $- != *i* ]] && returntut tatsächlich das, was es oben in einem Kommentar sagt: es prüft, ob das interaktive Flag gesetzt ist. Die [[und]] machen es zu einem Booleschen Wert, so dass es zu einem "wahren" oder "falschen" Wert führt. "false && return" bewirkt, dass es weitergeht. "true && return" bewirkt, dass es die Rückgabe ausführt.

Die Standard-Flags werden genauer erklärt:

h steht für "hash all": Dies weist bash an, sich die Positionen der Befehle zu merken, die es bei der Abfrage Ihres PFADS gefunden hat.

Ich bin für "interaktiv": Eingabe & Ausgabe zurück.

m steht für "monitor": Dies ermöglicht die Auftragssteuerung

B steht für "Klammer erweitern". Auf diese Weise können Sie die Klammererweiterung verwenden

H steht für "history expand". Auf diese Weise können Sie einen Befehl aus Ihrem Verlauf erneut ausführen, indem Sie seiner Nummer ein Ausrufezeichen voranstellen


Apropos. Ich habe ...

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

Grundsätzlich funktioniert das selbe aber besser lesbar nehme ich an.

Rinzwind
quelle
6

Grundsätzlich bedeutet dies "Wenn die Shell-Flags kein i in Kleinbuchstaben enthalten, stoppen Sie die Funktion / das Skript hier".

[[ ]]

bezeichnet einen bedingten Ausdruck in bash

$-

bedeutet die Shell-Flags. Es wird "i" enthalten, wenn die Shell interaktiv ist (dh Sie können Befehle eingeben, anstatt ein Skript auszuführen).

!=

bedeutet einfach "ungleich".

*i*

ist ein Platzhalter-Muster, das mit allem übereinstimmt, was "i" enthält.

return

Ohne Argumente bedeutet dies nur, dass die Ausführung der aktuellen Funktion oder des aktuellen Skripts angehalten wird.

&&

ist der logische UND- Operator. Der rechte Ausdruck wird in diesem Fall returnnur ausgewertet (ausgeführt), wenn der linke Ausdruck wahr ist . In vielen Programmiersprachen a && bist dies eine Abkürzung für if a then b- dies wird als "Kurzschlussbewertung" bezeichnet und macht Programmierlehrer verrückt, wenn Sie sie verwenden: D

geschlafen
quelle
2

Ich würde annehmen, dass es so aussieht, als würde es heißen: Wenn bash in einer interaktiven Shell nicht geöffnet ist, dann tue nichts.

Ich kenne die ganze Funktion nicht, aber es gibt wahrscheinlich Befehle und Flags, die unterhalb dieser Zeile gesetzt sind, falls Sie in einem TTY eine Bash geöffnet haben.

Der Wanderer
quelle
danke :) aber ich freue mich darauf zu wissen, was genau ist $-und *i*wie es herausfindet, ob sein interaktiver Modus oder nicht
Severus Tux