2009-10-13 10 views
7

Mam program (którego nie napisałem), który nie został zaprojektowany do odczytu poleceń z pliku. Wprowadzanie poleceń na STDIN jest dość uciążliwe, więc chciałbym móc je zautomatyzować, pisząc polecenia w pliku do ponownego użycia. Problem polega na tym, że jeśli program trafi na EOF, pętle będą w nieskończoność próbowały odczytać w następnym poleceniu upuszczając niekończący się torrent opcji menu na ekranie.Przejście z zawartości pliku na STDIN w poleceniu piped? (Linux Shell)

Co mogę zrobić, to przygotować plik zawierający polecenia do programu za pomocą potoku, a następnie użyć jakiejś magii powłoki, aby przełączyć z pliku na STDIN, gdy trafi w plik EOF .

Uwaga: Rozważałem już użycie kota z "-" dla STDIN. Niestety (wcześniej o tym nie wiedziałem), polecenia potokowe czekają, aż wyjście pierwszego programu zakończy się przed uruchomieniem drugiego programu - nie działają równolegle. Jeśli istnieje sposób, aby uruchomić programy równolegle z tego typu działaniem, to by zadziałało!

Jakieś myśli? Dzięki za pomoc!

EDIT:

Należy zauważyć, że moim celem jest nie tylko do ochrony systemu przed uderzanie końca pliku poleceń. Chciałbym móc kontynuować pisanie poleceń z klawiatury, gdy plik trafi EOF.

Odpowiedz

15

chciałbym zrobić coś takiego

 
(cat your_file_with_commands; cat) | sh your_script 

ten sposób, gdy plik z poleceń odbywa się druga cat będzie karmić swój skrypt z cokolwiek wpiszesz na stdin później.

+2

Możesz * to zrobić? * Nie miałem pojęcia, że ​​możesz grupować polecenia. To jest coś nowego w tym dniu. Dzięki temu nie muszę korzystać z drugiego okna - wielkie dzięki, Idelic! – zslayton

+0

Dla zainteresowanych, możesz zbudować plik zawierający polecenia w trakcie: (cat twój_plik_z_przestrzeniami, tee-twój_plik_z_przeczytaniami) | sh your_script, który dołącza każde polecenie do pliku oprócz przekazania go skryptowi za pośrednictwem potoku. – zslayton

+0

+1 Pomogło mi to na poziomie 1 gry wojennej narnia na intruded.net – chmeee

1

Czy próbowałeś użyć czegoś podobnego do tail -f commandfile | command Myślę, że powinno się potokować linie pliku do polecenia bez zamykania deskryptora pliku później. Użyj -n, aby określić liczbę linii do wyprowadzenia, jeśli tail -f nie złapie ich wszystkich.

+0

To dobry pomysł, ale niestety nie pozwala mi kontynuować wpisywanie poleceń po plik został zakończony. (Powinienem był to wyjaśnić w moim wpisie - będę go edytować.) Jeśli wpiszesz "tail -f plik_administracyjny -", aby spróbować przełączyć na STDIN po przeczytaniu pliku, to narzeka: ostrzeżenie: podążanie za standardowym wejściem w nieskończoność jest nieefektywne Dziękuję za tę myśl! – zslayton

+1

Czy próbowałeś dołączyć linie do pliku za pomocą 'echo coś >> plik polecenia'? 'tail -f' powinien również śledzić te dodatki. –

+0

Ha! Po prostu * próbowałem tego. Skomentuję ponownie, jeśli zadziała. (Program musi trochę potrwać.) – zslayton

2

Można by pomyśleć, że expect będzie do tego nadrobić.

2

samo jak Idelic odpowiedź z bardziej proste składni;)

cat your_file_with_commands - | sh your_script 
Powiązane problemy