it-swarm.com.de

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

Ich habe diese Zeile in meinem .bashrc und möchte wissen, was das genau bedeutet

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
22
Severus Tux
  • $- bedeutet "aktuelle Flags".
  • echo $- gibt "himBH" zurück. Das sind alles Vorgaben.
  • also ... [[ $- != *i* ]] && return tut 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 macht das aber besser lesbar nehme ich an.

33
Rinzwind

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 zu allem passt, 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 Ausdruck rechts, in diesem Fall return, wird nur ausgewertet (ausgeführt), wenn der Ausdruck links true ist. Daher ist a && b in vielen Programmiersprachen eine Abkürzung für if a then b - dies wird als "Kurzschlussbewertung" bezeichnet und macht Programmierlehrer verrückt, wenn Sie sie verwenden: D

6
delt

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.

2
TheWanderer