Słyszałem o „bezużytecznym użyciu kota” i znalazłem kilka sugestii, ale poniższe nie dają nic w mojej powłoce bash.
< filename
Używanie kota działa zgodnie z oczekiwaniami.
cat filename
Używam Fedory Core 18 i GNU bash, wersja 4.2.45 (1).
EDYCJA: Używanie go przed rurą też nie działa.
< filename | grep pattern
Natomiast użycie kota działa zgodnie z oczekiwaniami.
cat filename | grep pattern
EDYCJA 2: Aby to wyjaśnić, wiem, że mogę tego użyć
grep pattern < filename
ale przeczytałem tutaj /programming/11710552/useless-use-of-cat, że mogę go również użyć przed poleceniem. Nie działa to jednak przed poleceniem.
bash
shell
io-redirection
cat
pluskwa
źródło
źródło
Odpowiedzi:
Symbol mniej niż i (
<
) otwiera plik i dołącza go do standardowego uchwytu urządzenia wejściowego jakiejś aplikacji / programu. Ale nie dałeś powłoce żadnej aplikacji, do której mógłbyś dołączyć dane wejściowe.Przykład
Te 2 przykłady robią w zasadzie to samo, ale wkładają je w 2 nieco odmienne sposoby.
otwiera plik
otwiera STDIN
Zaglądając za zasłonę
Możesz użyć,
strace
aby zobaczyć, co się dzieje.Kiedy czytamy z pliku
Kiedy czytamy ze STDIN (oznaczonego jako 0)
W pierwszym przykładzie widzimy, że
cat
otworzył plik i odczytał z niegoblah.txt
,. W drugim widzimy, żecat
czyta zawartość plikublah.txt
za pomocą deskryptora pliku STDIN, oznaczonego jako deskryptor numer 0.źródło
cat
jest ogólnie źle rozumiany i używany, gdy nie jest to konieczne.< filename command
.Klasyczne bezużyteczne użycie
cat
polega na tym, że używa się go do wprowadzania programów, które doskonale potrafią bezpośrednio otwierać pliki. Na przykład:Zły
Dobry
Również dobrze (
<file
może być po obu stronach polecenia)źródło
cat
.cat
obejmują (1)cat file
(z wyjściem na ekran / terminala, chociaż, jeśli plik jest dłuższa niż ekran jest wysoka, może wolisz używaćmore
lubless
czy coś takiego) (2)cat file1 file2 file3 > all_data
( dokładnie do czegocat
służy), (3)cat f1 f2 f3 | tr …
(lub potokuj do innego programu, do którego nie chcesz przekazywać plików bezpośrednio; np.wc
(Np. Jeśli chcesz zobaczyć tylko sumę całkowitą) lubgrep
(np. jeśli masz starą wersję, która nie obsługuje-h
, tj.--no-filename
)),… (ciąg dalszy)cat -n file | sort … -k1 | sed 's/^ *[0-9]*\t//'
, (5)sudo cat file600 | untrusted_program
(tzn. Ty (twój UID) nie możesz odczytać pliku i nie chcesz uruchamiać programu jako root lub nawet częściowo uprzywilejowany UID). Również ( e ) (tj. Liczba od 2 do 3)program_that_generates_html | cat static_html_header - static_html_footer
(którą prawdopodobnie chciałbyś przekierować do pliku lub potoku).UUOC znajduje się w:
lub
Tam
some-cmd
czyta zawartośćsomefile
rury, która jest zasilana przezcat
którą sama ją odczytujesomefile
.some-cmd
może czytać bezpośrednio zsomefile
(po tym, jak powłoka otworzy go dla standardowego wejścia), nie ma potrzebycat
:lub
(przekierowania mogą pojawiać się w dowolnym miejscu w prostym wierszu poleceń).
źródło