Odpowiedzi:
W tym przypadku oznacza to „standardowe wejście”. Jest używany przez niektóre programy (np. tar
), Gdy wymagany jest argument pliku i zamiast tego należy użyć stdin. To nie jest konstrukcja powłoki i zależy od używanego programu. W razie wątpliwości sprawdź stronę podręcznika!
W tym przypadku standardowe wejście jest argumentem -f
opcji. W przypadkach, gdy -
nie jest obsługiwany, możesz uciec od używania czegoś takiego jak tar xvf /proc/self/fd/0
lub tar xvf /dev/stdin
(ten ostatni jest szeroko obsługiwany w różnych unikatach).
Nie polegaj na tym, że oznacza uniwersalne „standardowe wejście”. Ponieważ nie jest interpretowany przez powłokę, każdy program może sobie z tym poradzić w dowolny sposób. W niektórych przypadkach jest to standardowe wyjście lub coś zupełnie innego: na su
nim oznacza „uruchom powłokę logowania”. W innych przypadkach nie jest to wcale interpretowane. Pamięć mięśni spowodowała, że utworzyłem całkiem sporo plików o nazwie, -
ponieważ niektóre wersje programów, do których byłem przyzwyczajony, nie rozumiały kreski.
STDOUT
, w zależności od kontekstu.
/dev/stdin
lub /dev/stdout
można go użyć, jeśli naprawdę chcesz strumienia wejściowego / wyjściowego. Należy pamiętać, że jest to strumień, programy, które chcą wyszukiwać w pliku, mogą nie działać z nim poprawnie, tak jak w przypadku -
(np.
bash
łącznika jest interpretowany przez powłokę. Zobacz Advanced Bash-Scripting Guide - Rozdział 3. Znaki specjalne , a następnie wyszukaj tekst [myślnik] lub „przekierowanie z / na standardowe lub standardowe”. Za pomocą bash
możesz użyć łącznika, w którym większość miejsc oczekuje nazwy pliku. To oczywiste uzupełnienie <| > IMHO
cat
uchwyty -
(sprawdź stronę). Wersja wbudowana w powłokę cat
może, ale nie musi, ale nie jest to cała powłoka. Ponadto, jeśli obsłużysz powłokę -
, możesz powiedzieć echo -
i rozszerzy się ona na coś innego. Zamiast tego po prostu przypomina myślnik (nie /dev/stdin
lub /proc/self/fd/0
). I echo test > -
po prostu tworzy plik o nazwie -
, więc najwyraźniej też go tam nie obsługuje. Aha, a strona, którą wymieniłeś, nie mówi, że jest obsługiwana przez powłokę , mówi, że możesz jej używać z, cat
i diff
oba te elementy wyraźnie rozumieją myślniki.
W tym przypadku -
jest to całkiem bezużyteczne, zakładając, że używasz Linuksa:
GNU tar (wersja na Linuksa) domyślnie przyjmuje dane wejściowe ze standardowego wejścia. Jeśli nie chcesz tego zachowania i chcesz przekazać nazwę pliku jako argument wiersza poleceń, musisz określić flagę f
:
tar xf filename
To jest to samo co
tar x < filename
Lub, jeśli dane wejściowe są spakowane gzip jak w twoim przykładzie:
gzip -dc filename | tar x
Określenie f
flagi tutaj nie ma żadnego znaczenia , ale ponieważ została podana, nazwa pliku musi być podana jako -
wskazująca, że chcemy czytać ze standardowego wejścia (zobacz inną odpowiedź). Powtarzając, jest to zbędne i nieco dziwne.
Ponadto powyższą linię można uprościć, ponieważ można nakazać tarowi GNU przesyłanie strumieniowe danych wejściowych przez gzip
samą z
flagę:
tar xfz filename
- Nie trzeba dzwonić gzip
jawnie.
tar
ma z
opcję.
tar
domyślnie korzysta z pierwszego napędu taśmowego ze względów historycznych.
/dev/sa0
w FreeBSD 9.0, /dev/rst0
NetBSD 6.0 i OpenBSD 5.1). Domyślnie system AIX 7.1 ma wartość /dev/rmt0
. Domyślnie MINIX3 to /dev/sa0
. (W każdym przypadku sprawdzałem najnowszą wersję systemu operacyjnego, nie są to „stare komputery mainframe”). Solaris można konfigurować za pomocą pliku, w /etc
którym domyślnie jest to napęd taśmowy. GNU tar, Schilling tar, OSX i BusyBox domyślnie ustawione na stdin / stdout.
tar
domyślnie drugi napęd taśmowy. :)
-
nie musi znajdować się na końcu polecenia. Na przykład:ls -l | diff - /old_ls_output.txt
.