Ile jest w sumie sposobów wprowadzania poleceń w dane wejściowe?

9

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?

rekin
źródło

Odpowiedzi:

9

Przynajmniej następujące:

  1. Opcje poleceń: foo --bar

  2. Standardowe wejście: foo | barlubbar < foo

  3. Plik (i): foo *.*(lub otwierając plik (i) za pomocą kodu w foo) †

  4. Eksport środowiska: export foo=bar; baz

  5. Środowisko (bez eksportu): foo=bar bazlubenv foo=bar baz

  6. TUTAJ dokument: foo << EOF bar EOF

  7. TUTAJ ciąg: foo <<< bar

  8. Sygnały kill -SIGUSR1 $procid

  9. Cała różnorodność komunikacji między procesami , taka jak gniazda, TCP, pliki mapowane w pamięci

† tak, zdaję sobie sprawę, że stdin to plik (lub podobny do pliku). I że przekazywanie takich plików jest tak samo jak przekazywanie opcji

Neil McGuigan
źródło
1
Możesz dodać foo < barjako dodatkowy wariant (plik przez stdin)
Hagen von Eitzen
14

Na początek sort << HEREi 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.

  1. 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.

  2. 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.

Kusalananda
źródło