W tym samouczku musimy wykonać następujące polecenie:
# curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Co oznacza ostatni -
(łącznik) po bash
?
Widziałem wiele poleceń z tym i nie mogłem znaleźć logicznego wyjaśnienia, a także nie znalazłem sposobu, aby przeformułować wyszukiwanie google. Czy jest to wynik polecenia potokowego?
linux
command-line
bash
pipe
Omar BISTAMI
źródło
źródło
sudo bash
dźwięków jest naprawdę przerażające. Spróbuj poszukać samouczka, który nie zachęca do takich praktyk.symbolhound.com
.Odpowiedzi:
Bash zachowuje się w nieco niestandardowy sposób
-
.POSIX mówi:
I
Ale potem
man 1 bash
czyta:Tak więc dla Bash
-
nie oznacza ani standardowego wejścia, ani pliku, stąd nieco niestandardowy.Teraz twój konkretny przypadek:
I podejrzewam, autor tego polecenia nie może zrozumieć,
-
jest równoważne--
w tej sprawie. I podejrzewam, autor chciał się upewnić,bash
będzie czytać ze standardowego wejścia, ale oczekuje-
się pracy zgodnie z wytyczną 13.Ale nawet gdyby działało zgodnie z wytycznymi,
-
byłoby tutaj niepotrzebne, ponieważbash
wykrywa, kiedy jego standardowym wejściem jest potok i działa odpowiednio (chyba że-c
podano itp.).Jednak
-
nie działa zgodnie z wytycznymi, działa jak--
. Nadal--
jest tutaj niepotrzebny, ponieważ po nim nie ma żadnych argumentów.Moim zdaniem ostatnie
-
nic nie zmienia. Polecenie działałoby bez niego.Aby zobaczyć, jak
--
i-
może być ogólnie użyteczne, przestudiuj poniższy przykład.cat
w moim Kubuntu przestrzega obu wytycznych i użyję go do wykazania przydatności-
i--
.Pozwól plikowi o nazwie
foo
istnieć. Spowoduje to wydrukowanie pliku:Pozwól plikowi o nazwie
--help
istnieć. Nie spowoduje to wydrukowania pliku:Ale spowoduje to wydrukowanie pliku o nazwie
--help
:Spowoduje to konkatenację pliku o nazwie
--help
z tym, co pochodzi ze standardowego wejścia:Wygląda na to, że tak naprawdę nie potrzebujesz
--
, ponieważ zawsze możesz przekazać,./--help
co z pewnością zostanie zinterpretowane jako plik. Ale zastanów sięgdy nie wiesz z góry, jaka jest zawartość zmiennej. Nie możesz po prostu się
./
do tego przyłączyć , ponieważ może to być ścieżka absolutna i./
mogłaby ją złamać. Z drugiej strony może to być plik o nazwie--help
(bo dlaczego nie?). W tym przypadku--
jest bardzo przydatny; jest to o wiele bardziej niezawodne polecenie:źródło
W
man bash
, na końcu opcji jednoznakowych znajduje się:Jeśli cytowany kompletny polecenia, widzę żadnego powodu do stosowania
-
pobash
w tym przypadku, ale to nie szkodzi.źródło
-
, co jest mało prawdopodobne, ale-
/--
umożliwia.cat file1 - file2 > file3
.bash -
oznacza, żebash
czeka na standardowe wejście. Więc praktycznie bash wykona wszystko, co zwróci polecenie po lewej stronie|
Podobny, ale łatwiejszy przykład to:
echo hello | cat -
tutajcat
wydrukuje „cześć”. Dlaczego? Ponieważ „cześć” jest wysyłane do kota|
icat
czeka na wszystko, co do niego zostanie wysłaneTeraz podzielmy całe polecenie na dwa:
to polecenie curl zwróci coś, co można zrozumieć i wykonać przez bash
wtedy mamy potok,
|
który wyśle wynik zwracany przez polecenie curl na prawą stronę potoku, tjsudo -E bash -
. Wreszciesudo -E bash -
, bash jest gotowy do wykonania wszystkiego, co zostanie do niego wysłaneźródło