Śledzę ten schemat zawieszania zadania, a następnie pozwalam mu zbyt często kontynuować Ctrl-Z bgsekwencję.
Zastanawiałem się, czy jest jakiś sposób na skompresowanie tego do pojedynczego naciśnięcia klawisza?
Moja skorupa jest zsh
linux
keyboard-shortcuts
shell
zsh
Evgeniy Dolzhenko
źródło
źródło
Odpowiedzi:
Ctrl+ ZSekwencji obsługiwane przez terminal nie przez powłokę. (Przydatne tło: Jaka jest dokładna różnica między „terminalem”, „powłoką”, „tty” i „konsolą”? )
Tylko niewielki, nierozszerzalny zestaw funkcji można przypisać do klawisza w terminalu . Można dostosować klawisze powiązane z tymi funkcjami, ale nie można dodawać innej funkcji. Funkcje te dzielą się na trzy kategorie:
eof
, Ctrl+ D), koniec linii (eol
, Ctrl+ M), usuń znak w lewo (erase
, Ctrl+ H), usuń słowo w lewo (werase
, Ctrl+ W), usuń wiersz (kill
, Ctrl+ U).stop
( Ctrl+ S),start
( Ctrl+ Q). Przydatny tylko w przypadku starych terminali szeregowych, które upuszczały znaki, gdy terminal nie był w stanie nadążyć za komputerem lub odwrotnie.intr
, Ctrl+ C), wymuszenie wyjścia (quit
, Ctrl+ \), zawieszenie ( Ctrl+ Z).Niektóre systemy, w tym Linux, rozszerzają tę listę, ale nigdy nie widziałem takiego zawierającego tło. Zauważ, że wymagałoby to obsługi zarówno w sterowniku terminala w jądrze, jak i w emulatorze terminala. Musisz więc zadowolić się zawieszeniem, które wysyła do zadania pierwszego planu sygnał SIGTSTP . To uruchamia SIGCHLD w procesie nadrzędnym lidera zadania na pierwszym planie, którym jest zwykle powłoka. Gdy powłoka otrzymała SIGCHLD, wywołuje,
waitpid
aby dowiedzieć się, dlaczego została powiadomiona, a po wykryciu, że zadanie w tle zostało zawieszone, wyświetla powiadomienie (np.[1] + 12345 suspended mycommand
) I nowy monit.Możesz zaprogramować powłokę, aby wysyłała
SIGCONT
sygnał do zadania na pierwszym planie. Nie sądzę, aby zsh miał do tego haczyk, trzeba by załatać kod źródłowy. I nie ma sposobu, aby zsh wiedział, czy naprawdę chciałeś przerwać program (ups, ten program może robić coś złego, pozwól mi go zawiesić na czas rozwiązywania) lub w tle.To, co robię, to ustawić sekwencję klawiszy Ctrl+ Zw Zsh, aby ustawić tło dla bieżącego zadania (
%%
). W ten sposób mogę wysłać zadanie pierwszoplanowe do tła, naciskając Ctrl+ Z Ctrl+ Z. W tym momencie robię Ctrl+ Zcoś innego, co jest użyteczne, gdy bieżący wiersz wejściowy nie jest pusty (więc nie wróciłem z podprocesu): „zawieszam” bieżący wiersz wejściowy, pozwalając mi wpisać inne polecenie , po czym przerywana linia jest ponownie umieszczana w buforze wejściowym.źródło
^ z ^ z jak zsh powyżej jest możliwe w bash, choć jest trochę niechlujny i nie uruchamiałem tego zbyt długo:
"\C-z": "bg\n"
więc ^ z dla zawieszenia jest włączane po uruchomieniu polecenia, a następnie wyłączane dla monitu bash.
źródło
Więc znalazłem rozwiązanie, nie dokładnie to, czego chcę, ale do cholery blisko stąd /superuser//a/161922/35223
źródło
Ctrl+Z
wywołującejbg
, nie jestem pewien, czy wykryję niepustą linię wejściową).Czy te polecenia, które chcesz uruchomić na pierwszym planie, a następnie przełączyć na tło? Nie wiem, czy jest na to prostszy sposób. Ale jeśli chcesz na początku uruchamiać polecenia, które będą w tle, możesz po prostu dodać znak ampersand na końcu wiersza. np.
ping google.com &
zacznie pingować w tle; nie będziesz mógł z nim wchodzić w interakcje, chyba że napiszeszfg
.źródło