Sigo esse padrão de suspensão da tarefa e, em seguida, deixo que ela continue com muita frequência na Ctrl-Z bgsequência.
Eu queria saber se existe alguma maneira de comprimir isso para pressionar uma tecla?
Minha concha é zsh
linux
keyboard-shortcuts
shell
zsh
Evgeniy Dolzhenko
fonte
fonte
Respostas:
A sequência Ctrl+ Zé manipulada pelo terminal, não pelo shell. (Contexto útil: Qual é a diferença exata entre um 'terminal', um 'shell', um 'tty' e um 'console'? )
Somente um conjunto pequeno e não extensível de funções pode ser vinculado a uma chave em um terminal . Você pode personalizar as teclas associadas a essas funções, mas não adicionar outra função. Essas funções se enquadram em três categorias:
eof
, Ctrl+ D), final da linha (eol
,Ctrl + M), apaga o caractere à esquerda (erase
, Ctrl+ H), apaga a palavra à esquerda (werase
, Ctrl+ W), apaga a linha (kill
, Ctrl+ U).stop
( Ctrl+ S),start
( Ctrl+ Q). Útil apenas em terminais seriais antigos que eliminavam caracteres quando o terminal não conseguia acompanhar o computador ou vice-versa.intr
, Ctrl+ C), força encerrada (quit
, Ctrl+ \), suspensão ( Ctrl+ Z).Alguns sistemas, incluindo Linux, estendem essa lista, mas nunca vi um que incluísse plano de fundo. Observe que seria necessário suporte no driver do terminal no kernel e no emulador de terminal. Então você tem que se contentar com a suspensão, que envia o trabalho em primeiro plano a sinal SIGTSTP . Isso aciona um SIGCHLD no processo pai do líder do trabalho em primeiro plano, que geralmente é o shell. Quando o shell recebeu o SIGCHLD, ele chama
waitpid
para descobrir por que foi notificado e, ao detectar que um trabalho em segundo plano foi suspenso, ele exibe uma notificação (por exemplo[1] + 12345 suspended mycommand
) e um novo prompt.Você pode programar o shell para enviar um
SIGCONT
sinal para o trabalho em primeiro plano. Eu não acho que o zsh tenha um gancho para isso, você precisará corrigir o código fonte. E não há como o zsh saber se você realmente queria interromper o programa (oops, esse programa pode estar fazendo a coisa errada, deixe-me suspendê-lo enquanto eu resolvo isso) ou em segundo plano.O que faço é definir a sequência de teclas Ctrl+ Zno zsh para colocar em segundo plano o trabalho atual (
%%
). Dessa forma, posso enviar o trabalho em primeiro plano para o segundo plano pressionando Ctrl+ Z Ctrl+ Z. Enquanto estou nisso, faço Ctrl+ Zfazer algo mais útil quando a linha de entrada atual não está vazia (para que eu não tenha acabado de voltar de um subprocesso): "suspender" a linha de entrada atual, permitindo que eu digite outro comando , após o qual a linha interrompida é empurrada de volta para o buffer de entrada.fonte
^ z ^ z como o zsh acima é possível no bash, embora seja um pouco desajeitado e eu não executei isso por muito tempo:
"\C-z": "bg\n"
então ^ z for suspend é ativado quando um comando é executado e, em seguida, desativado para o prompt do bash.
fonte
Então encontrei a solução, não exatamente o que eu quero, mas muito perto daqui /superuser//a/161922/35223
fonte
Ctrl+Z
chamadasbg
, não tenho certeza sobre a detecção de uma linha de entrada não vazia).Esses comandos que você queria executar em primeiro plano inicialmente e depois mudaram para o segundo plano? Não sei se existe uma maneira mais simples de fazer isso. Mas se você deseja executar comandos que estarão em segundo plano, basta adicionar um e comercial ao final da linha. por exemplo,
ping google.com &
começará a executar ping em segundo plano; você não poderá interagir com ele a menos que digitefg
.fonte