Kiedy próbuję zainstalować Dropbox z wiersza poleceń, czytam polecenia
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
co to -
znaczy tutaj czy to poprzedni katalog?
command-line
tar
Algebra
źródło
źródło
f -
. Może to nieco ułatwić znalezienie odpowiedzi na stronach podręcznika.wget
itar
. W ten sposób odpowiedni programiści mogą ulepszyć swoją dokumentację, aby przyszli użytkownicy nie natknęli się ponownie na te same problemy. Innymi słowy: bądź bohaterem i uczyń świat lepszym miejscem!$TAPE
jest ustawione.Odpowiedzi:
Niektóre polecenia akceptują
-
zamiast nazwy pliku:-
argument przekazanywget
po-O
.-
argumentu przekazanotar
późniejxzf
.Polecenie, które pokazano, pobiera plik archiwum
wget
i rozpakowuje gotar
. Aby to osiągnąć, dane wyjściowe z metody potokowej ( )wget
są przesyłane|
do wejściatar
. Dlategowget
zapisuje na standardowe wyjście zamiast pliku itar
czyta ze standardowego wejścia zamiast pliku.źródło
-
. . Więc jeśli-
to argumentu o „opcji plików” i to ma szczególne znaczenie, wówczas musi być tak, że z stdin / stdout. Program nie może traktować jako specjalnego przypadku i po prostu szukać pliku-
-
)-
specjalnie w ogóle, traktując go jako literalnej pliku. Jedynym sposobem na złamanie wytycznych jest potraktowanie ich w sposób-
szczególny, ale o innym znaczeniu niż sugerowane w wytycznych.To tylko nazwa pliku, którą wiele programów uniksowych interpretuje jako „zamiast faktycznie otwierać plik, czytać z
stdin
(lub pisać dostdout
)”.Oznacza to odczyt z danych wejściowych przesyłanych strumieniowo do programu; w twoim przypadku jest to wynik działania wget.
źródło
./-
jeśli naprawdę chcesz otworzyć plik o nazwie-
.stdin
to deskryptor pliku i-
nazwa, którą podajesz, aby go użyć. Jednak z punktu widzenia systemu operacyjnego nie jest to nazwa pliku. Tylko z perspektywy użytkownika./dev/stdin
to po prostu wygodna nazwa pliku oferowana przez jakieś narzędzie jądra. Zazwyczaj nigdzie się niefopen("/dev/stdin", "r")
dzieje, gdy piszesz program, który wybiera użycie stdin; po prostu skorzystaj zextern FILE* stdin
tego, co zapewnił ci nagłówek libc; tak przy okazji, to jest deskryptor pliku liczb całkowitych0
.-
Argumenttar
określa, że archiwum należy czytać odstdin
zamiast pliku. Z podręcznika GNU tar :Inne polecenia mają to samo zachowanie i jest określone przez standard POSIX.1-2017 :
źródło