O shell interativo do Bash trava quando o Tmux é suspenso se foi iniciado automaticamente pelo arquivo de inicialização do Bash

0

Quando eu inicio manualmente Tmux emitindo tmux do meu shell interativo Bash, eu posso mais tarde suspender Tmux com CTRL-BZ sem problemas . Pressionar essa combinação de teclas me traz de volta ao processo pai, ou seja, o shell interativo Bash do qual eu iniciei Tmux .

Mas eu tenho o seguinte trecho de código no final do meu arquivo de configuração para os shells interativos Bash ( ~/.bashrc ) definidos:

# Test if neither _Tmux_ nor _Screen_ is running.
if ! [[ -n "$TMUX" || "$TERM" =~ screen ]]; then
  # Test if _Tmux_ is on the '$PATH'.
  if type -p tmux &> /dev/null; then
    # Try to attach to latest unattached session or start a new one.
    { tmux attach-session || tmux new-session; } &> /dev/null
  fi
fi

Este trecho de código inicia automaticamente Tmux sempre que eu inicio um shell interativo Bash dado que não há nenhum programa de multiplexador de terminal ainda em execução.

Mas pressionar CTRL-BZ dessa vez suspende Tmux deixando-me em um processo pai que não responde, isto é, o shell interativo Bash que iniciou automaticamente Tmux de seu arquivo de inicialização ( ~/.bashrc ).

Além de separar Tmux de e reconectá-lo a uma sessão, existe uma maneira de fazer o Tmux suspender de tal forma que eu possa continuar a trabalhar em seu pai? Bash shell interativo e voltar mais tarde colocando-o em primeiro plano com fg ?

Por favor note que por várias razões eu pretendo deixar o Bash fork Tmux e não se substituir por ele ( exec ).

    
por Tim Friske 21.10.2018 / 16:39

1 resposta

0

Você deve ativar o controle de trabalho com set -m no seu .bashrc antes de iniciar o tmux .

bash executa arquivos de inicialização como .bashrc com o controle de tarefa desativado. De shell.c :

#if defined (JOB_CONTROL)
  /* Startup files should be run without job control enabled. */
  old_job_control = interactive_shell ? set_job_control (0) : 0;
#endif

Por favor note que C-b C-z não define o tmux em segundo plano sozinho; controle de trabalho ausente no shell superior, o sinal SIGTSTP do tmux envia ele mesmo apenas para parar; o processo tmux ainda estará no grupo de processos em primeiro plano do terminal (apesar da comutação enganosa da tela alternativa com o escape exit_ca_mode / rmcup / te em algum terminal emuladores como xterm )

    
por 21.10.2018 / 17:21