desativando o controle de tarefas no bash (CTRL-Z)

12

Às vezes acontece que pressiono CTRL+ Zpor acidente e meu aplicativo desaparece em segundo plano. Eu sei, posso trazê-lo de volta fg, então não é um grande negócio. Mas estou pensando em desativar isso job controlde qualquer maneira. Em toda a minha vida, não me lembro de um caso em que precisei, apenas me parece uma forma de relíquia do passado.

Isso é bom para desativar job controlcompletamente? Ou estou faltando alguma coisa e esse recurso pode ser útil? Como eu o desativaria no meu.bashrc

ATUALIZAR:

Eu tentei set +mcomo sugerido por @Falsenames. No entanto, isso só funciona quando digito no terminal. Adicionando set +mno meu .bashrcnão tem efeito.

Martin Vegter
fonte
1
Atualização: o fato de que $-(lista de opções ativas) não contém mais mquando você coloca o set +mseu ~/.bashrcsugere que o Bash está tentando desativar o controle do trabalho, mas no final não o faz por causa de um bug - pode valer a pena relatar via Você está em
Home

Respostas:

8

Você pode adicionar o seguinte em sua linha de comando para parar de usar o modo de monitoramento.

definir + m

Se você realmente precisar da funcionalidade ctrl-z posteriormente, basta digitar 'set -m' para ativar o monitoramento para essa sessão.

Da festança do homem . Observe que isso é para '-m', com "+ m" alternando essa configuração para desativar.

set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...] 
....
-m
    Monitor mode. Job control is enabled. This option is on by default for interactive
    shells on systems that support it (see JOB CONTROL above). Background processes 
    run in a separate process group and a line containing their exit status is printed
    upon their completion. 

Como último esforço, você pode compilar manualmente uma versão do bash sem o sinalizador "--enable-job-control". Aqui está um guia de instalação rápida do GNU. Se você optar por seguir esse caminho, NÃO substitua / bin / bash apenas no caso de os processos em segundo plano serem executados no controle do trabalho de espera do bash. Em vez disso, crie um /bin/bash.alt ou outro arquivo. Seu shell padrão pode ser alterado para este alternativo executando usermod ou editando / etc / passwd como root.

Nomes falsos
fonte
set +mfunciona no terminal, mas quando o adiciono no meu .bashrc, não tem efeito.
Martin Vegter
Ah, você está certo. Isso está localizado no script específico nesse ponto. Em seguida, o bash afirma seus padrões em.
Falsenames
compilar minha própria festa parece um preço bastante alto a ser pago por desativar o controle do trabalho. Deve haver alguma configuração que funcione via .bashrc.
Martin Vegter
Como tudo está definido no momento da compilação, não é necessário que haja uma maneira de alterá-lo em um arquivo de instalação que carrega após o início da execução do shell. O problema aqui é que alguém decidiu compilar o controle de tarefa bash WITH ativado como padrão para a distribuição que você está usando. Eu realmente não posso argumentar pessoalmente contra isso, já que uso vários controles de trabalho todos os dias no trabalho, e não tenho certeza se poderia me adaptar facilmente à vida sem ele. Concedido, essa é a minha experiência, não a sua ... é por isso que há sinalizadores na compilação, para dar opções.
Falsenames
4

stty susp undefdesativará o sinal de suspensão iniciado pelo teclado para a maioria dos programas; no entanto, comandos como vime emacsque possuem ligações específicas Ctrl-Zterão que ser reconfigurados individualmente.

Você pode adicionar esse comando stty ao seu ~/.bash_profileou ~/.profile, logout, logon novamente.

Mark Plotnick
fonte
isso realmente funciona para alguns programas. Mas, por exemplo mc, isso não funciona. O que basicamente confirma o que você disse. Não existe uma solução universal que funcione para todos?
Martin Vegter 19/06/2014
Acabei de perceber, set +mfunciona para mc, mas somente se eu digitar no terminal, não em .bashrcou .profile.
Martin Vegter 19/06/2014
3

Ou estou faltando alguma coisa e esse recurso pode ser útil?

Para responder a essa parte da pergunta: Cz / fgcombo é essencial para o meu fluxo de trabalho do vim. Por exemplo, eu prefiro Cz> git commit> fga usar wrappers git de dentro vim.

Cz ajuda no tratamento do shell como IDE, em conformidade com o princípio " faça uma coisa ". (Isso em vez de "editor como IDE").

denten
fonte
1
^Zainda é absolutamente útil - mas foi ainda mais útil quando um terminal não era uma janela, mas uma caixa na sua frente. E você tinha apenas um.
Volker Siegel
2

Adicione trap "" SIGTSTPseu script. Ele capta o sinal e o ignora.

#!/bin/bash
trap "" SIGTSTP
watch date
where23
fonte