Grałem więc w Zork 1 i zacząłem kopiować tekst, aby pokazać mojemu przyjacielowi, ale przypadkowo zapomniałem przytrzymać klawisz Shift, naciskając CTRL+ C. To zatrzymało polecenie i straciłem dane Zork ...
Czy istnieje jakaś „pomocna” wskazówka, której mogę użyć, aby zapobiec zatrzymaniu polecenia po naciśnięciu klawiszy CTRL+ C?
Zauważ, że Zork jest uruchamiany wewnątrz terminala. Jest to gra terminalowa, w której wydajesz polecenia do wykonywania różnych czynności.
Odpowiedzi:
Kombinacja klawiszy Ctrl+ Cwysyła znak
^C
(wartość bajtu 3). Powoduje to, że terminal wysyła sygnał SIGINT do programu działającego na pierwszym planie¹. Konwencjonalne działanie dla tego sygnału polega na przerwaniu bieżącego polecenia: programy zaprojektowane do przetwarzania kolejnych poleceń wracają do wiersza najwyższego poziomu, podczas gdy programy zaprojektowane jako pojedyncze polecenie wsadowe lub ciągłe wyjście z interakcji. Najwyraźniej program, którego używasz, został zaprojektowany zgodnie z drugim modelem.Ten klucz wysyłania sygnału jest cechą ogólnego interfejsu terminala w jądrze, wspólnym dla wszystkich emulatorów terminali i rzeczywistych terminali fizycznych. Możesz skonfigurować, który klucz wysyła ten sygnał, a także inne klucze (w szczególności CtrlZwysyłanie SIGSTOP w celu zawieszenia programu pierwszego planu) za pomocą
stty
polecenia. Aby przełączyć klawisz SIGINT na Ctrl+ _(w bieżącym terminalu):Aby całkowicie to wyłączyć:
Aby zresetować wszystkie ustawienia do wartości domyślnych:
Klucz nie może być dowolną kombinacją klawiszy, musi to być wartość jednobajtowa.
stty
Ustawienie może zostać zastąpione przez programy - niektóre programy (zwłaszcza programy tryb tekstowy pełnoekranowe) robić swoje przetwarzania skrótu klawiaturowego.¹ Dokładniej , dla wszystkich procesów w grupie procesów pierwszego planu , dla których terminal jest terminalem sterującym .
źródło
CTRL+ Cwysyła sygnał przerwania (
SIGINT
czyli sygnał numer 2) do zadania na pierwszym planie. Możesz to wyłączyć poprzez „wychwytywanie” sygnału za pomocątrap '' 2
polecenia przed uruchomieniem Zork.Ponownie włącz CTRL+ C(odwiń
SIGINT
) za pomocątrap 2
.Wskazówka : możesz dodać coś takiego do
~/.bashrc
:W ten sposób nigdy nie zapomnisz o wyłączeniu i ponownym włączeniu sygnału, a łatwiej jest rozpocząć grę, wpisując
zork
terminal.Uwaga : możesz użyć nazwy sygnału zamiast numeru, jeśli jest to dla ciebie wygodniejsze, tj .
trap '' sigint
Lubtrap '' int
. Jestem przyzwyczajony do używania liczb, np. Wkill -9
i tak dalej.źródło