Nieblokująca komenda bash

11

Powiedzmy, że mam skrypt bash z następującymi elementami:

#!/bin/sh
gedit
rm *.temp

Kiedy wykonuję go za pomocą sh ./test.sh, geditwyskakuje okienko, ale rmczęść nie działa dopóki nie zamknę gedit.

Chcę, aby skrypt nadal działał, nawet jeśli geditnie jest zamknięty; jak geditnie blokuje wykonania bash.

Podany przeze mnie przykład jest tylko przykładem (postawienie rmpierwszego nie zadziała w prawdziwej sytuacji).

Plante
źródło

Odpowiedzi:

25

Termin, którego szukasz, nazywa się „tłem” pracy. Po uruchomieniu polecenia w powłoce lub w skrypcie możesz dodać flagę na końcu, aby wysłać ją do tła i kontynuować uruchamianie nowych poleceń lub reszty skryptu. W większości pocisków, w tym sh, jest to &postać.

#!/bin/sh
gedit &
rm ./*.temp

W ten sposób powłoka nie czeka na zakończenie gediti oba, rmi geditbędzie działać jednocześnie.

Termin „blokowanie” zwykle odnosi się do strumieni wejściowych / wyjściowych, często do plików lub urządzenia. Jest również używany w skompilowanych językach w czymś podobnym do tego, którego używałeś, ale w bash i podobnych skryptach powłoki terminologia (i funkcja!) Jest raczej inna.

Caleb
źródło
Dziękuję Ci! to wyjaśnia, dlaczego dostałem tylko piątkę i wprowadzałem wyniki w google: D
Plante
Mam wrażenie, że Plante chce wpływać na skrypt z zewnątrz, wykonywać każdą operację w tle, a nie przepisywać skrypt.
użytkownik nieznany
@ użytkownik: Zajęło mi kilka lektur, aby zgadnąć, czego chciał. Może mógłbyś skomentować pytanie w celu wyjaśnienia.
Caleb
Właśnie tego potrzebowałem, dzięki jeszcze raz. jak dotąd działa świetnie!
Plante