Dzięki za help -m setwskazówkę. To działa. Próbowałem man setprzed pytaniem, jednak na ubuntu jestNo manual entry for set
Ole
2
@Ole, setjest wbudowany w bash, więc jeśli man bashmożesz go znaleźć w sekcji SHELL BUILTIN COMMANDS. Podczas przeglądania strony man prawdopodobnie można skakać do niego, szukając tego regexp: \bset \[.
User5910
Odpowiedzi:
364
set -xwłącza tryb powłoki, w którym wszystkie wykonywane polecenia są drukowane na terminalu. W twoim przypadku jest on wyraźnie używany do debugowania, co jest typowym przypadkiem użycia set -x: drukowanie każdej wykonanej komendy może pomóc w wizualizacji przepływu sterowania skryptu, jeśli nie działa zgodnie z oczekiwaniami.
To jest BARDZO przydatne! Chciałbym, żeby ktoś mi to powiedział wcześniej. Czy istnieją inne ciekawe sztuczki, które mogą zwiększyć naszą meta-umiejętność pisania skryptów?
Student
7
@Student: set -eu góry skryptu spowoduje, że skrypt zakończy działanie z błędem, ilekroć wystąpi błąd (i nie jest jawnie obsługiwany). Uważam, że jest to zdecydowanie lepsza opcja niż domyślna, polegająca na ciągłym chciwości (podobnie jak niesławny Visual Basic On Error Resume Next).
John Zwinck
1
@JohnZwinck niestety set -ema bardzo niepożądane skutki uboczne, do tego stopnia, że sprawia, że przegląd kodu jest prawie niemożliwy (ponieważ zachowanie danej linii zależy od tego, co jest na górze stosu wywołań - jeśli funkcja jest wywoływana w kontekście „sprawdzonym”, set -ejest wyłączona dla tego wywołania i wszystkiego, co z kolei wywołuje). Zobacz ćwiczenia w BashFAQ # 105 .
Charles Duffy
77
set -x
Wyświetla ślad prostych poleceń dla poleceń, poleceń przypadku, poleceń wyboru i arytmetyki poleceń i ich argumentów lub powiązanych list słów po ich rozwinięciu i przed ich wykonaniem. Wartość zmiennej PS4 jest rozszerzana, a wynikowa wartość jest drukowana przed poleceniem i jego rozwiniętymi argumentami.
Powyższy przykład ilustruje użycie set -x. Gdy jest używany, powyższe wyrażenie arytmetyczne zostało rozszerzone. Widzieliśmy, jak krok po kroku ocenia się linię pojedynczą.
Pierwszy krok exprzostał oceniony.
Drugi krok echozostał oceniony.
Aby dowiedzieć się więcej o zestawie → odwiedź ten link
jeśli chodzi o skrypt powłoki,
["$DEBUG"=='true']&&set-x
Twój skrypt mógł drukować dodatkowe wiersze informacji, gdy tryb wykonywania został wybrany jako DEBUG. Tradycyjnie ludzie włączali tryb debugowania, gdy skrypt wywoływany był z opcjonalnym argumentem, takim jak-d
-u: domyślnie wyłączone. Po aktywacji wyświetlany jest komunikat o błędzie podczas używania nieskonfigurowanej zmiennej.
-v: domyślnie nieaktywne. Po aktywacji oryginalna treść informacji zostanie wyświetlona (bez zmiennej rozdzielczości) przed wyświetleniem informacji.
-x: domyślnie nieaktywne. Jeśli aktywowane, treść polecenia zostanie wyświetlona przed uruchomieniem polecenia (po rozwiązaniu zmiennej wyświetlany jest symbol ++).
Porównaj następujące różnice:
/# set -v && echo $HOME/root
/# set +v && echo $HOMEset+v && echo $HOME
/root
/# set -x && echo $HOME+ echo /root
/root
/# set +x && echo $HOME+set+x
/root
/# set -u && echo $NOSET/bin/sh: NOSET: parameter not set/# set +u && echo $NOSET
help -m set | less
help -m set
wskazówkę. To działa. Próbowałemman set
przed pytaniem, jednak na ubuntu jestNo manual entry for set
set
jest wbudowany w bash, więc jeśliman bash
możesz go znaleźć w sekcji SHELL BUILTIN COMMANDS. Podczas przeglądania strony man prawdopodobnie można skakać do niego, szukając tego regexp:\bset \[
.Odpowiedzi:
set -x
włącza tryb powłoki, w którym wszystkie wykonywane polecenia są drukowane na terminalu. W twoim przypadku jest on wyraźnie używany do debugowania, co jest typowym przypadkiem użyciaset -x
: drukowanie każdej wykonanej komendy może pomóc w wizualizacji przepływu sterowania skryptu, jeśli nie działa zgodnie z oczekiwaniami.set +x
wyłącza to.źródło
set +x
wyłącza to.set -e
u góry skryptu spowoduje, że skrypt zakończy działanie z błędem, ilekroć wystąpi błąd (i nie jest jawnie obsługiwany). Uważam, że jest to zdecydowanie lepsza opcja niż domyślna, polegająca na ciągłym chciwości (podobnie jak niesławny Visual BasicOn Error Resume Next
).set -e
ma bardzo niepożądane skutki uboczne, do tego stopnia, że sprawia, że przegląd kodu jest prawie niemożliwy (ponieważ zachowanie danej linii zależy od tego, co jest na górze stosu wywołań - jeśli funkcja jest wywoływana w kontekście „sprawdzonym”,set -e
jest wyłączona dla tego wywołania i wszystkiego, co z kolei wywołuje). Zobacz ćwiczenia w BashFAQ # 105 .set -x
[ źródło ]
Przykład
Powyższy przykład ilustruje użycie
set -x
. Gdy jest używany, powyższe wyrażenie arytmetyczne zostało rozszerzone. Widzieliśmy, jak krok po kroku ocenia się linię pojedynczą.expr
został oceniony.echo
został oceniony.Aby dowiedzieć się więcej o zestawie → odwiedź ten link
jeśli chodzi o skrypt powłoki,
Twój skrypt mógł drukować dodatkowe wiersze informacji, gdy tryb wykonywania został wybrany jako
DEBUG
. Tradycyjnie ludzie włączali tryb debugowania, gdy skrypt wywoływany był z opcjonalnym argumentem, takim jak-d
źródło
Porównaj następujące różnice:
źródło