Jak zamknąć stdin w skrypcie powłoki?

13

Mam źle zachowujący się program, który muszę wywołać ze skryptu. Wyjdzie, gdy tylko zobaczy coś na standardowym wejściu. Czy istnieje sposób na zamknięcie standardowego wejścia?

Lody z owocami i śmietaną
źródło

Odpowiedzi:

21

Czy istnieje sposób na zamknięcie standardowego wejścia?

Deskryptory zamykania plików

  • n<&- Zamknij deskryptor pliku wejściowego n.

  • 0<&-lub <&-Zamknij standardowe wejście.

Źródło Rozdział 20. Przekierowanie I / O

DavidPostill
źródło
9

Po prostu włóż program bez wyjścia:

: | misbehaving_program
choroba
źródło
Wow, co to jest? Co robi?
KaiserKatze
„:” to wewnętrzne polecenie powłoki, które nic nie robi. Umożliwia wprowadzanie komentarzy lub może służyć do przekierowań. Na przykład „:> plik” tworzy pusty plik. Lub „: |” w tym przypadku podaje pusty strumień do polecenia.
Raúl Salinas-Monteagudo
8

Znalazłem, możesz zamknąć standardowe wejście za pomocą:

exec 0<&-
Lody z owocami i śmietaną
źródło
5

Zgodnie z tym, co mówisz, możesz rozwiązać swój problem po prostu

pickyProgram < /dev/null
Raúl Salinas-Monteagudo
źródło