Como permanecer na sessão após sair do comando tailf do script remoto

Como permanecer na sessão após sair do comando tailf do script remoto

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

Durante o script, tailf /dir/log/o comando é gravado em Execute_Command_File. Após a execução do script, a sessão solicitada é aberta e tailffunciona.

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

Tentei adicionar /bin/bashno final de Execute_Command_File, não ajudou. E claro que tentei tail -f/F, também não funcionou...

Alguma ideia?

Responder1

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

Usararmadilhacomando interno de bash(1)para mudar isso.

O script a seguir 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. primeiroarmadilhainstale uma ação personalizada relacionada ao sinal SIGINT
  3. segundoarmadilharedefinir o comportamento padrão do sinal SIGINT

A saída do script é:

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

isso mostra que o segundo arquivo foi gravado de forma que o final do script seja alcançado quando tailmorrer por causa do arquivo CTRL-C.

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

$ bash tailf-ctrl.sh 
hello
^C
$

informação relacionada