Wysłanie aplikacji z pierwszego planu do tła wymaga współpracy zarówno terminala, jak i powłoki. Terminal nie może tego zrobić sam, ponieważ powłoka musi ustawić grupę procesów pierwszego planu. Powłoka nie może tego zrobić sama, ponieważ terminal musi przetworzyć naciśnięcie klawisza (powłoka nie jest na pierwszym planie, więc nie może odebrać naciśnięcia klawisza).
Zbliżeniem jest bardzo szybkie przesłanie aplikacji do tła. W końcu aplikacja dzieli czas procesora z innymi, a przerwa wynosząca kilka setnych sekundy nie powinna mieć znaczenia. (Dzieje się tak w przypadku aplikacji działających w czasie rzeczywistym, więc należy uruchomić je w tle.) Używam powiązania powłoki dla Ctrl+, Zktóre wysyła zadanie pierwszoplanowe do tła. W ten sposób naciśnięcie Ctrl+ Z Ctrl+ Zwysyła zadanie do tła przy minimalnym czasie zawieszenia.
Oto moje wiązanie zsh, które również „w tle” wpisuje na wpół wpisane polecenie, gdy wiersz polecenia nie jest pusty .
fancy-ctrl-z () {
emulate -LR zsh
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
W języku angielskim dla odbiorców niebędących użytkownikami Zsh:
Jeśli chcesz tylko zachowanie w tle, niezależnie od tego, czy wiersz poleceń jest pusty:
function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_
Nie wiem, czy możesz zrobić to samo w bash. Powinno to być tak proste, jak bind -x '"\C-z": bg'
tylko, że bash pozostawia znak tty stop na miejscu, więc nigdy nie dostaje Ctrl+ Zjako danych wejściowych.