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 -fopcji. W przypadkach, gdy -nie jest obsługiwany, możesz uciec od używania czegoś takiego jak tar xvf /proc/self/fd/0lub 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 sunim 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/stdinlub /dev/stdoutmoż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ą bashmożesz użyć łącznika, w którym większość miejsc oczekuje nazwy pliku. To oczywiste uzupełnienie <| > IMHO
catuchwyty -(sprawdź stronę). Wersja wbudowana w powłokę catmoż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/stdinlub /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, cati diffoba 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 fflagi 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 gzipsamą zflagę:
tar xfz filename
- Nie trzeba dzwonić gzipjawnie.
tarma zopcję.
tardomyślnie korzysta z pierwszego napędu taśmowego ze względów historycznych.
/dev/sa0w FreeBSD 9.0, /dev/rst0NetBSD 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 /etcktórym domyślnie jest to napęd taśmowy. GNU tar, Schilling tar, OSX i BusyBox domyślnie ustawione na stdin / stdout.
tardomyślnie drugi napęd taśmowy. :)
-nie musi znajdować się na końcu polecenia. Na przykład:ls -l | diff - /old_ls_output.txt.