Pierwszą rzeczą, którą zauważyłem w Linuksie, były różne sposoby podawania danych do polecenia, znam kilka, ale nie wiem, ile ich jest w sumie.
sposoby, które znam do tej pory:
rurociąg:
echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort
z klawiatury z sygnałem końca pliku:
sort
>gurken
>zucker
>braunkohle
z pliku:
sort foo
TUTAJ ciąg (faktycznie nazywany TUTAJ dokumentem):
sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE
Czy to wszystko, czy jest na to więcej sposobów, dlaczego w ogóle istnieją różne sposoby, niektóre są zbędne?
źródło
foo < bar
jako dodatkowy wariant (plik przez stdin)Na początek
sort << HERE
i tak dalej nie jest ciągiem tutaj. To jest dokument tutaj. Ciąg tutaj używa<<<
operatora. To jest w bash (i kilka innych powłok).Ogólnie są dwa sposoby. Jeden odbywa się za pośrednictwem standardowego wejścia (i przekierowań), a drugi poprzez parametry.
Standardowe wejście i jego przekierowania
Jest to strumień, który jest domyślnie podłączony do terminala, w którym wykonuje się polecenie i jest powiązany z fd (deskryptorem pliku) 1. Jest podawany bez względu na to, co jest wpisane do terminala. Chociaż to (dane wejściowe) można przekierować tak, jak za pomocą potoku
|
lub używając tutaj dokumentów lub ciągów znaków. Wtedy dane wejściowe nie pochodzą z terminala, ale są dołączone do standardowego wyjścia komendy poprzedzającej potok. Różne powłoki mają różne przekierowania, więc w tej kategorii powinieneś sprawdzić dokumentację powłoki. Poszukaj przekierowań wejściowych.Parametry
Oto co w twoim przykładzie
sort foo
. Wywołując program lub funkcję, przekazujesz jeden lub więcej parametrów. Plik lokalny to tylko jedna możliwość. Parametr może zawierać adres URL lub cokolwiek innego. Opcje tutaj są nieograniczone.Podsumowując, istnieją dwa ogólne sposoby:
pierwszy wyodrębnia z wewnętrznej logiki aplikacji i manipuluje standardowym wejściem na poziomie systemu operacyjnego / powłoki,
podczas gdy drugi dotyczy wewnętrznych elementów aplikacji i to one oferują nieograniczone możliwości, w oparciu o parametry połączenia jako interfejs.
W obu przypadkach odpowiedź brzmi: nie ma ograniczeń. Chociaż rzeczywiste ograniczenia dotyczą systemu operacyjnego / powłoki i samej aplikacji.
źródło