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 tailf
está funcionando.
El problema, cuando intento salir de tailf
(ctrl+C), cierra la terminal.
Intenté agregar /bin/bash
al final de Execute_Command_File
, pero no ayudó. Y por supuesto lo intenté tail -f/F
y tampoco funcionó...
¿Algunas ideas?
Respuesta1
Sucede que tail
muere 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 bash
cuando 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:
- FIRMAes la señal relacionada con CTRL+C
- primerotrampainstalar una acción personalizada relacionada con la señal SIGINT
- 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 tail
muere 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
$