Co oznacza „[[$ -! = * I *]] && return”?

22

Mam tę linię w sobie .bashrci chciałbym wiedzieć, co to dokładnie znaczy

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Severus Tux
źródło

Odpowiedzi:

33
  • $- oznacza „bieżące flagi”.
  • echo $-zwraca „himBH”. Wszystkie są domyślne.
  • więc ... [[ $- != *i* ]] && returnfaktycznie robi to, co mówi powyżej w komentarzu: sprawdza, czy ustawiona jest interaktywna flaga. [[I]] sprawiają, że jest to wartość logiczna, więc kończy się na „prawda” lub „fałsz”. „false && return” powoduje, że „true && return” powoduje wykonanie zwrotu.

Domyślne flagi wyjaśnione bardziej szczegółowo:

h jest dla „hash all”: mówi bashowi, aby zapamiętał lokalizacje poleceń, które znalazł poprzez zapytanie do ŚCIEŻKI.

i oznacza „interaktywne”: wprowadzanie danych wejściowych i odzyskiwanie danych wyjściowych.

m oznacza „monitor”: umożliwia kontrolę zadań

B oznacza „nawias klamrowy”. Pozwala to na użycie rozszerzenia nawiasów klamrowych

H oznacza „rozwój historii”. Dzięki temu możesz ponownie uruchomić polecenie z historii, zastępując jego numer wykrzyknikiem


Tak poza tym. Mam ...

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

Zasadniczo robi to samo, ale łatwiejsze do odczytania.

Rinzwind
źródło
6

Zasadniczo oznacza to „Jeśli flagi powłoki nie zawierają małych liter i, zatrzymaj tutaj funkcję / skrypt”.

[[ ]]

oznacza wyrażenie warunkowe w bash

$-

oznacza flagi powłoki. Będzie zawierać „i”, jeśli powłoka jest interaktywna (tzn. Możesz wpisywać polecenia, w przeciwieństwie do wykonywania skryptów)

!=

oznacza po prostu „nie równy”.

*i*

to wzór wieloznaczny pasujący do wszystkiego zawierającego „i”

return

bez żadnych argumentów oznacza po prostu zatrzymanie wykonywania bieżącej funkcji lub skryptu.

&&

jest logicznym operatorem AND . W tym przypadku wyrażenie po prawej returnstronie zostanie ocenione (wykonane) tylko wtedy, gdy wyrażenie po lewej jest prawdziwe . Dlatego w wielu językach programowania a && bjest to skrót if a then b- nazywa się to „oceną zwarcia” i doprowadza nauczycieli programowania do szaleństwa, gdy go używasz: D

delt
źródło
2

Zakładam, że tak to mówi: jeśli bash nie jest otwarty w interaktywnej powłoce, nie rób nic.

Nie znam całej funkcji, ale prawdopodobnie poniżej linii znajdują się polecenia i flagi na wypadek, gdybyś miał otwarty bash w TTY.

Wędrowiec
źródło
dzięki :) ale nie mogę się doczekać, aby dowiedzieć się, co dokładnie jest $-i *i*jak to się dowie, czy to tryb interaktywny, czy nie
Severus Tux