Czy przekierowanie wstecz jest takie samo jak potok?

11

W Linuksie, jeśli wpiszesz

sort < txtfile

czy to to samo co

cat txtfile | sort
tony_sid
źródło

Odpowiedzi:

17

Na pytanie tytułowe: Nie. Przejście stdinz zawartości pliku ( przekierowanie danych wejściowych ) nie jest tym samym, co przesyłanie danych wyjściowych jednego programu do danych wejściowych innego programu.

Ale ponieważ catfaktycznie drukujesz zawartość pliku, wynik jest w rzeczywistości taki sam w tym przykładzie.


Ale nawet tylko następujące wyniki dają bardzo różne wyniki:

$ cat * | sort
$ sort < *

Jeśli istnieje więcej niż jeden pasujący plik, ten ostatni wygeneruje

-bash: *: ambiguous redirect

ponieważ nie jest tak elastyczny jak poprzedni, który przechwytuje wszystkie pasujące pliki i przesyła je jako dane wejściowe sort.

Daniel Beck
źródło
3
A co z ... sort *? Brak bezużytecznego korzystania z cat, bezużyteczne korzystanie z pośrednictwa, najkrótsze w pisaniu, najłatwiejsze do wymyślenia, i uważam, że GNU sort zajmie się optymalizacją skalowalności dla bardzo dużych plików (nie jestem tego pewien - na wpół coś tam pamięta)
sehe
1
@ Prawdopodobnie. Właśnie użyłem tego przykładu, aby pokazać, że oba są różne. Tu nie chodzi o wydajne użycie rodzaju. Sortowanie jest bardziej elastyczne niż to, oczywiście.
Daniel Beck
@DanielBeck, Jeśli chodzi o wydajność, jest sort < txtfileznacznie bardziej wydajny niż cat txtfile | sort?
Pacerier