Mam tę linię w sobie .bashrc
i chciałbym wiedzieć, co to dokładnie znaczy
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Mam tę linię w sobie .bashrc
i chciałbym wiedzieć, co to dokładnie znaczy
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Odpowiedzi:
$-
oznacza „bieżące flagi”.echo $-
zwraca „himBH”. Wszystkie są domyślne.[[ $- != *i* ]] && return
faktycznie 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.
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 return
stronie zostanie ocenione (wykonane) tylko wtedy, gdy wyrażenie po lewej jest prawdziwe . Dlatego w wielu językach programowania a && b
jest to skrót if a then b
- nazywa się to „oceną zwarcia” i doprowadza nauczycieli programowania do szaleństwa, gdy go używasz: D
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.
$-
i*i*
jak to się dowie, czy to tryb interaktywny, czy nie