Próbowałem mieć program interaktywny w skrypcie bash:
my_program
I chcę móc go zamknąć za pomocą „Ctrl + c”. Ale kiedy to robię, mój skrypt również się zamyka.
Wiem o.
trap '' 2
my_program
trap 2
Ale w tym przypadku po prostu nie mogę zamknąć za my_program
pomocą Ctrl + c.
Czy masz pomysł, jak zezwolić Ctrl + c na program, ale nie zamykasz skryptu, który go uruchamia?
EDYCJA: dodaj przykład
#!/bin/bash
my_program
my_program2
Jeśli używam Ctrl + c do zamknięcia my_program
, my_program2
nigdy nie jest wykonywany, ponieważ cały skrypt jest zamknięty.
tail
zamiast zabijania kotów następnym razem?Możesz zresetować pułapkę do wartości domyślnej, podając komendę trap
-
jako argument akcji. Jeśli zrobisz to w podpowłoce , nie wpłynie to na pułapkę w powłoce nadrzędnej. W swoim skrypcie możesz to zrobić dla każdego polecenia, które musisz przerwać za pomocą Ctrl-C:źródło
exec my_program
w podpowłoce, aby być nieco bardziej wydajnym.Kiedy używasz Crtl+ C, przerywasz program („ zabijasz ” go).
Prawdopodobnie szukasz zawieszenia programu („ wstrzymaj ” go). W tym celu możesz użyć Crtl+ Z.
Po wstrzymaniu programu możesz go zobaczyć za pomocą
jobs
. Na przykład:[1]+ Stopped ./foobar
tutaj mam tylko jedno zadanie, zadanie nr 1, ale może istnieć więcej niż jedno - każde zadanie ma swój własny numer.
Można kontrolować Ci zawieszony proces stosując szereg poleceń, na przykład
bg
,fg
ikill
.bg %1
ponownie uruchomi pracy nr 1 w b ACK g okrągłyfg %1
nastąpi ponowne uruchomienie pracy # 1 w f rudyg rundakill %1
zabije przydzielonego stanowiska nr 1Uwaga, które można wykorzystać
bg
ifg
bez argumentów, jeśli masz tylko jedną aktywną pracę.źródło