Czy przekierowanie wstecz jest takie samo jak potok?


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.