Co oznaczają argumenty „-v” i „-x” oznaczające bash?

17

Widziałem kilka skryptów powłoki z następującym shebangiem:

#!/bin/bash -x -v 

Jednak man bashnie wyjaśnia, co te argumenty -xi -voznaczają, jeśli są one należą do bashw ogóle.

Co więc oznaczają te -xi -v(i inne możliwe argumenty)?

Alex
źródło

Odpowiedzi:

26

Z man bash(tak, jest to duża strona podręcznika, zwykle wyszukiwanie w Google jest szybsze):

-x Po rozwinięciu każdego prostego polecenia dla polecenia, przypadku, polecenia wyboru lub arytmetyki dla polecenia wyświetl rozwiniętą wartość PS4, a następnie polecenie i jego rozwinięte argumenty lub powiązaną listę słów.

Skutecznie: po uruchomieniu skryptu zostaną wyświetlone wszystkie działania wykonane w tym skrypcie. Więc wszystkie ifs, pętle i polecenia działają. Bardzo przydatne do debugowania.

-v Drukuj wiersze wprowadzania powłoki podczas ich odczytywania. Po uruchomieniu skryptu wydrukuje cały skrypt podczas odczytu pliku. Gdy korzystasz z powłoki interaktywnie, wyświetli ona każde polecenie po naciśnięciu enter.

Powyższe cytaty pochodzą z objaśnienia setwbudowanego polecenia w man bash, który wyjaśnia również, że opcje dla setmogą być również przekazywane jako argumenty (w wierszu shebang):

Opcje są domyślnie wyłączone, chyba że zaznaczono inaczej. Użycie + zamiast -powoduje wyłączenie tych opcji. Opcje można również określić jako argumenty wywołania powłoki. Aktualny zestaw opcji można znaleźć w $-. Zwracany status jest zawsze prawdziwy, chyba że napotkano niepoprawną opcję.

mtak
źródło
Ok, więc jest to prosty argument do bashu, a ja po prostu mogę mieć inną wersję bez tych argumentów?
Alex
Jeśli mówisz o bash: Myślę, że wszystkie wydania bash z ostatniej dekady poprą te argumenty. Jeśli mówisz o stronie man: jest ogromna i musisz wiedzieć, czego szukasz, ale ona już tam jest (przynajmniej w Ubuntu 13.04). Zazwyczaj wyszukiwanie w Google jest szybsze.
mtak
6
+1 „Wyszukiwarka Google jest szybsza” -> /-xkilka razy dostaniesz się tam man(właściwie to less). Możesz powtórzyć ostatnie wyszukiwanie za pomocą /+ strzałki w górę, ale musisz /przewinąć stronę w dół, aby jakiekolwiek bieżące wyszukiwanie trafiło poza ekran ( wyszukiwanie do przodu, ?do tyłu).
złotowłosa
2
@ TAFKA'goldilocks 'Myślę, że to zależy od twojej dystrybucji. Na stronie podręcznika bash Ubuntu 13.04 43 trafienie jest słuszne. Łatwiej jest wyszukać następne trafienie w mniejszym stopniu, używając nwyszukiwania do przodu i Ndo tyłu.
mtak
Ups, tak naprawdę patrzyłem test -xpod EXPRESSIONS WARUNKOWE (trzeci hit), nie set -x. -xin man bashjest dość złym przypadkiem, więc uzyskanie bardziej szczegółowych informacji pomaga: jeśli użyjesz /^\s+-x\b(= początek linii + biała spacja + -x+ granica słowa), dostaniesz właściwy na 5 trafień ... byłoby to 4, gdyby nie fakt, że xpasują X... co prowadzi mnie do pytania, które chciałem zadać . W każdym razie, w / większość stron podręcznika, ^\s+-x\bwzorzec powinien najpierw działać dla przełączników.
złotowłosa
2

Strona bash człowiek robi aluzję, że te opcje są wyjaśnione dalej w dół, faktycznie, ale to łatwo przeoczyć.

Dlatego twój problem powinien w rzeczywistości brzmieć: Sekcja OPCJE strony podręcznika bash jest niekompletna. Odpowiedzią byłoby ich duplikowanie lub wyróżnienie pierwszej sekcji sekcji OPCJE:

OPTIONS
   All  of  the  single-character shell options documented in the descrip‐
   tion of the set builtin command can be used as options when  the  shell
   is invoked.  [ ... ]

Wreszcie, aby to zakończyć: są standardowymi opcjami dla dowolnej powłoki POSIX do pokazywania kodu skryptu podczas odczytu ( -v) i uruchamiania ( -x). Dane wyjściowe pojawią się na stderr.

Henk Langeveld
źródło