Cómo permanecer en la sesión después de salir del comando tailf desde un script remoto

Cómo permanecer en la sesión después de salir del comando tailf desde un script remoto

Tengo un script de PowerShell desde el cual estoy ejecutando el siguiente comando:putty.exe -ssh user@srv -pw password -m Execute_Command_File -t

Durante la secuencia de comandos, tailf /dir/log/el comando se escribe en Execute_Command_File. Después de ejecutar el script, la sesión solicitada se abre y tailfestá funcionando.

El problema, cuando intento salir de tailf(ctrl+C), cierra la terminal.

Intenté agregar /bin/bashal final de Execute_Command_File, pero no ayudó. Y por supuesto lo intenté tail -f/Fy tampoco funcionó...

¿Algunas ideas?

Respuesta1

Sucede que tailmuere debido a CTRL+C pero también se envía (SINGINT) al padre bash. Dado que, de forma predeterminada, bash muere cuando recibe dicha señal, debe reemplazar el comportamiento predeterminado de bashcuando la recibe.

Usartrampacomando incorporado de bash(1)para cambiar esto.

El siguiente script tailf-ctrl.sh es una demostración y muestra la respuesta:

#!/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

tenga en cuenta que:

  1. FIRMAes la señal relacionada con CTRL+C
  2. primerotrampainstalar una acción personalizada relacionada con la señal SIGINT
  3. segundotramparestablecer el comportamiento predeterminado de la señal SIGINT

La salida del script es:

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

eso muestra que el segundo archivo está escrito de modo que se llega al final del script cuando tailmuere debido al archivo CTRL-C.

Si comenta el primer comando trap, verá que aparece su problema: bash termina inmediatamente y la salida debería ser:

$ bash tailf-ctrl.sh 
hello
^C
$

información relacionada