• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy da się uruchomić bashowe polecenie wewnątrz innego (makefile) ?

VPS Starter Arubacloud
0 głosów
178 wizyt
pytanie zadane 11 czerwca 2019 w Inne języki przez Xarti Obywatel (1,380 p.)
edycja 12 czerwca 2019 przez Xarti

Cześć, potrzebuję zrobić daną rzecz: 

uruchomić program serwera -> uruchomić programy klientów (kilku) -> wysłać do serwera dane (najlepiej kilka linijek)

I dla automatyzacji chciałbym zawrzeć to wszystko wewnątrz makefila tak, aby wystarczyło wpisać make test i uruchomił się serwer,  potem klienci i potem od razu wpisały się dane.

Server i Client to programy napisane w C, serwer działa w nieskończonej pętli przyjmując argumenty ze standardowego wejścia. Samo wysyłanie argumentów nie stanowi problemu, bo wystarczy zrobić coś typu

./server <<< 'arg'

Czy da się tam pomiędzy wsadzić wywołanie klienta tak, aby nie działało to jak pipe (klienta w nowym oknie można uruchomić przy użyciu gnome-terminal, ale na końcu muszę jeszcze wysłać argumenty do serwera)

komentarz 11 czerwca 2019 przez adrian17 Ekspert (344,100 p.)
Nie do końca rozumiem części "wewnątrz innego".

Masz na myśli, jak wykonywać inne komendy podczas gdy serwer jest w nieskończonej pętli? Ale nie wiem co to ma do argumentów.
komentarz 12 czerwca 2019 przez adrian17 Ekspert (344,100 p.)

Widziałem że zrobiłeś edita, ale pytanie wciąż stoi:

Masz na myśli, jak wykonywać inne komendy podczas gdy serwer jest w nieskończonej pętli? Ale nie wiem co to ma do argumentów.

Czy może pytanie brzmi, jak dostarczać stdin do już działającego programu... czy coś innego?

komentarz 12 czerwca 2019 przez Xarti Obywatel (1,380 p.)
Sory, pisałem pytanie wieczorem i wyszło troszkę nie po polsku.

Chodzi mi o to że w tej chwili program działa następująco:

 - uruchamiam server w terminalu

- uruchamiam klienta w drugim terminalu (potem w trzecim, czwartym, ... klientów może być max 10),

- w terminalu servera wpisuję nazwę pliku, serwer ten plik wysyła do klienta, klient go wypisuje

- jeżeli jest kilku klientów i podam kilka plików (wystarczy nazwy plików wpisać po spacji) serwer ma je powysyłać w miarę równomiernie do wszystkich klientów

--------

i to wszystko działa, tylko jest z tym sporo klikania przy uruchamianiu tego trzydzieści razy  <testowanie w C :( > więc zastanawiałem się, czy da się zrobić w makefilu jakiegoś make'a który wykona te operacje za mnie?

 

Do tej pory wiem, że za pomocą  gnome-terminal mogę w nowym oknie uruchomić klienta (tylko argumenty do serwera muszę i tak podawać ręcznie), mogę też do serwera podać argumenty za pomocą '<<<' tylko wtedy nie będę miał żadnych klientów i nie wyśle polecenia. Szukam sposobu aby to połączyć.

2 odpowiedzi

+1 głos
odpowiedź 12 czerwca 2019 przez adrian17 Ekspert (344,100 p.)
wybrane 12 czerwca 2019 przez Xarti
 
Najlepsza

Osobiście bym tego nie robił w makefile'u bezpośrednio, prędzej w osobnym skrypcie bashowym lub Pythonie.

(Nie wiem do końca jaki masz powód ku otwieraniu klientów w osobnych terminalach. To, że serwer jest blokowany czekając na stdin, też brzmi bardzo dziwnie.)

Zamiast w osobnych terminalach, można po prostu uruchamiać kolejne procesy w tle. Potem można serwerowi przez stdin przekazać wejście.

W Pythonie to by wyglądało na przykład tak:

from subprocess import Popen, PIPE

server = Popen(['./server'], stdin=PIPE, text=True)

Popen(['./client'])
Popen(['./client'])
Popen(['./client'])

print('arg', file=server.stdin)

Trochę verbose, ale bardzo elastyczne.

Można też coś podobnego zrobić w bashu, na przykład otwierając serwer w screenie i przekazując tekst do tego screena.

komentarz 12 czerwca 2019 przez Xarti Obywatel (1,380 p.)

dzięki, wygląda spoko, co do wątpliwości długa odpowiedź jest taka, że w serwerze jest jeden wątek czekający na wejście, a inne sobie pracują, a klienci są tak otwierani bo od  czasu do czasu coś wyświetlają, kartka odwiedź: bo mi tak kazali w zadaniu wink

0 głosów
odpowiedź 12 czerwca 2019 przez p099 Mądrala (6,390 p.)
Może przejdź do ścieżki tego pliku i z tamtąd rób komendy?

Podobne pytania

+1 głos
2 odpowiedzi 337 wizyt
–3 głosów
1 odpowiedź 169 wizyt
pytanie zadane 12 listopada 2020 w Systemy operacyjne, programy przez Program IstaIso Nowicjusz (120 p.)
0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 27 marca 2020 w Systemy operacyjne, programy przez vv32 Nowicjusz (120 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...