Como permanecer na sessão depois de sair do comando tailf do script remoto

0

Tem o script PowerShell do qual estou executando o seguinte comando: putty.exe -ssh user@srv -pw password -m Execute_Command_File -t

Durante o script, o comando tailf /dir/log/ é gravado em Execute_Command_File. Depois de executar o script, a sessão solicitada é aberta e o tailf está funcionando.

O problema, quando tento sair do tailf (ctrl + C), fecha o terminal.

Tentou adicionar /bin/bash no final de Execute_Command_File , não ajudando. E, claro, tentou tail -f/F , também não está funcionando ...

Alguma idéia?

    
por igor 04.02.2018 / 11:55

1 resposta

1

Acontece que tail morre por causa do CTRL + C, mas também é enviado (SINGINT) para o pai, bash . Como por padrão o bash morre quando recebe tal sinal, você tem que substituir o comportamento padrão de bash quando o recebe.

Use o comando interno trap de bash(1) para alterar isso.

Seguir o script tailf-ctrl.sh é uma demonstração e mostra a resposta:

#!/bin/bash
function finish {
    echo "CTRL-C pressed!"
}

F=testfile

echo hello > $F
# set custom action
trap finish SIGINT # comment this to see the problem
tail -f $F
# reset default action
trap - SIGINT

echo "Hello after" > after
cat after

observe que:

  1. SIGINT é o sinal relacionado a CTRL + C
  2. primeiro trap instala uma ação personalizada relacionada ao sinal SIGINT
  3. segundo trap redefine o comportamento padrão do sinal SIGINT

A saída do script é:

$ bash tailf-ctrl.sh 
hello
^CCTRL-C pressed!
Hello after

que mostra que o segundo arquivo é gravado para que o final do script seja atingido quando tail morre devido ao CTRL-C .

se você comentar o primeiro comando trap, verá que o problema aparece: o bash termina imediatamente e a saída deve ser:

$ bash tailf-ctrl.sh 
hello
^C
$
    
por 07.02.2018 / 12:06