Jak wysłać wiele poleceń do powłoki i czekać na polecenie za końcami [zamknięte]


16

Mam około 20 poleceń i muszę to wszystko wysłać do powłoki Unixa i skopiować wynik, ale nie wiem, jak to zrobić.

Nie jestem pewien, jaką mam powłokę, ponieważ jest to mały program podłączony do zarządzania siecią mobilną, a dzięki temu małemu programowi mamy dostęp do wysyłania poleceń przez linię i otrzymywania wyników przez krzyk, dlatego nie mogę używać skryptów dla wysyłanie poleceń.

Polecenie 1 - Połącz się z serwerem.

Poczekaj, aż polecenie 1 zakończy się

Polecenie 2 - Zaktualizuj wszystkie informacje od zakończenia serwera 1

Czekać.

Polecenie 3 . Uzyskaj parametr.

... i więcej takich poleceń.

I starał się cmd1 | cmd2 | cmd3 i cmd1 & cmd2 & cmd3 icmd1;cmd2

Problem polega na tym, że jest cmd1podłączony do RNC (element sieci) i zajmuje około 15 sekund, po czym cmd2ma sens. ale po prostu pracuj dla pierwszego cmd. Wszelkie wskazówki, jak to uruchomić?


3
Używać skryptu? Lub &&między poleceniami.
Bernhard

Odpowiedzi:


20

Zwykle po prostu cmd1;cmd2;cmd3;cmd4(jeśli chcesz napisać go w jednym wierszu) lub używając, cmd1 && cmd2 && cmd3 && cmd4jeśli nie chcesz uruchamiać cmd3, gdy cmd2 zawiedzie.

Alternatywnie ;możesz napisać jedno polecenie w wierszu.

cmd1
cmd2
cmd3
cmd4

Jeśli chcesz, aby polecenia działały równolegle w tle, możesz także użyć

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

Każdą z tych metod można również umieścić w skrypcie powłoki. Różnica między tym, co piszesz w skrypcie powłoki, a tym, co piszesz w samej powłoce, jest niewielka.


MM problem polega na tym, że kiedy wysyłam cmd1, to naprawdę musi skończyć około 6 sekund, problem polega na tym, że gdy wysyła cmd2 i cmd1, jego przetwarzanie wciąż się nie udaje.
Jonathan Raul Tapia Lopez

4
W tym cmd1;cmd2przypadku (lub cmd1 && cmd2w tym przypadku) cmd2 nie uruchomi się, dopóki cmd1 nie wyjdzie (a zatem prawdopodobnie zakończy). Więc nie powinno być żadnego problemu - przeformułuj swoje pytanie lub podaj przykład, który ludzie mogą reprodukować.
frostschutz

Ok, zmodyfikuję pytanie. dzięki
Jonathan Raul Tapia Lopez

2

Możesz zajrzeć sleep, jeśli twoje środowisko na to pozwala. Pełna sekwencja byłaby wtedy podobna cmd1 && sleep 10s && cmd2.
Oto odpowiednia strona podręcznika dla snu .


tryb uśpienia / oczekiwania jest użyteczny tylko wtedy, gdy wiesz deterministycznie, ile czasu zajmuje poprzedni program (który może spawnować proces w tle), aby zakończyć i wyjść (IE The Halting Problem) LUB jeśli zagwarantujesz, że chcesz przerwać i uruchomić drugie polecenie po upływie określonego czasu minęło, co może się zdarzyć, jeśli oba są asynchroniczne, ale nadal chcesz między nimi trochę czasu. Najprawdopodobniej nie jest to, czego chcesz. Praktycznie rzecz biorąc, może działać. Ale to nie jest wiarygodne.
Justin Reeves,

1

Wystarczy użyć skryptu, pliku zawierającego polecenia do uruchamiania jeden po drugim, na przykład:

#!/bin/sh

command-01
command-02
...
command-20

Pierwszy wiersz (shebang) mówi o uruchomieniu następujących poleceń za pomocą /bin/sh, uczyń plik wykonywalnym ( chmod u+x your-little-script), a następnie możesz go uruchomić ./my-little-script. W ten sposób nie opuścisz kroku ;-)

Przeczytaj instrukcję powłoki, zapewnia ona pełny język programowania. Sprawdź, bash(1)czy to jest dostępne, czy też skorupa Korna ksh(1). Oferują wiele przydatnych funkcji do kontrolowania przepływu kontroli w skryptach (lub interaktywnie, jeśli o to chodzi).


Dzięki, ale nie mogę używać skryptu.
Jonathan Raul Tapia Lopez

Dlaczego? W każdym razie, chyba że jest to bardzo faszystowskie środowisko, powinieneś mieć możliwość źródłowego skryptu: source your-little-script(lub . your-little-scriptw skrócie).
vonbrand

Ponieważ nie mam bezpośredniego dostępu do systemu uniksowego. Lubię mini-program, który po prostu pozwala na uruchamianie cmd w liniach i uzyskiwanie wyniku przez krzyk, a do użytku z tymi poleceniami nie jest praktyczne używanie skryptów.
Jonathan Raul Tapia Lopez

OK, to trochę wyjaśnia ... Jakie środowisko jest źródłem / przeznaczeniem twoich poleceń? Czego używasz do wysyłania poleceń do wykonania? Co to jest zdalne środowisko? Jaka jest Twoja konfiguracja (czy masz zwykłe konto, do którego możesz uzyskać dostęp za pośrednictwem, ssha PuTTYmoże?
vonbrand,

-1

Możesz uruchomić coś takiego expectna komputerze lokalnym, aby wysłać cmd1i poczekać, aż zakończy się przed wydaniem cmd2itp. Musisz znaleźć rozsądny czas oczekiwania lub konkretne wyjście wskazujące, że polecenie zostało wykonane, aby napisać właściwy Spodziewaj się skryptu.

Oczywiście, cmd1; cmd2; cmd3; cmd4w jednym poleceniu wykona polecenia kolejno, jeden po drugim.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.