Napisałem dwa skrypty powłoki a.sh
i b.sh
. W a.sh
i b.sh
mam nieskończoną pętlę for i wypisują pewne dane wyjściowe do terminala. Chcę napisać inny skrypt, który wywoła oba a.sh
i, b.sh
ale chcę, aby użytkownik natychmiast odzyskał kontrolę nad terminalem, zamiast uruchamiać skrypt w nieskończoność i chcę ukryć dane wyjściowe w terminalu.
linux
scripting
sh
background-process
Behnam Safari
źródło
źródło
nohup /path/to/your/script.sh parameter1 > & 1 &
Jeśli ktoś zna lepszy sposób./dev/null 2>&1
jeśli używasz,nohup
ponieważ już automatycznie dodaje wszystkie strumienie STDOUT i STDERR do pliku nohup.out. Użyj tylko:nohup /path/to/your/command &
-bash: syntax error near unexpected token '&'
Przekieruj dane wyjściowe do pliku takiego jak ten:
Spowoduje to przekierowanie zarówno stdout, jak i stderr do tego samego pliku. Jeśli chcesz przekierować stdout i stderr do dwóch różnych plików, użyj tego:
Możesz użyć
/dev/null
jednego lub obu plików, jeśli nie obchodzi Cię standardowe wyjście i / lub stderr.Zobacz stronę podręcznika bash, aby uzyskać szczegółowe informacje na temat przekierowań.
źródło
Przepraszamy, to trochę za późno, ale znalazłem idealne rozwiązanie dla niektórych poleceń, w których nie chcesz żadnych standardowych ani błędów wyjściowych (kredyt tam, gdzie jest to należne: http://felixmilea.com/2014/12/running-bash-commands-background -prawidłowo / )
To przekierowuje wyjście do null i utrzymuje ekran w czystości:
źródło
Jeśli znajdują się w tym samym katalogu co skrypt, który zawiera:
Na
&
końcu jest to, co sprawia, że skrypt działa w tle.> /dev/null 2>&1
Część nie jest konieczne - to przekierowuje stdout i stderr strumieni, dzięki czemu nie trzeba ich zobaczyć na terminalu, który może chcesz zrobić dla hałaśliwych skryptów z partii produkcji.źródło
Uruchom w podpowłoce, aby usunąć powiadomienia i zamknąć STDOUT i STDERR:
źródło
[1] + 54765 done <emacs>
podziękowanieJeśli chcesz uruchomić skrypt w Linuksie kickstart, musisz uruchomić jak poniżej.
źródło
źródło
-x
zrobić?Te przykłady działają dobrze:
nohup sh prog.sh proglog.log 2> & 1 &
Dla pętli możesz użyć w ten sposób:
dla i w {1..10}; do sh prog.sh; spać 1; gotowe prog.log 2> & 1 &
Działa w tle i nie wyświetla żadnych danych wyjściowych.
źródło