Как остаться в сеансе после выхода из команды tailf из удаленного скрипта

Как остаться в сеансе после выхода из команды tailf из удаленного скрипта

Есть скрипт PowerShell, из которого я выполняю следующую команду:putty.exe -ssh user@srv -pw password -m Execute_Command_File -t

Во время выполнения скрипта tailf /dir/log/команда записывается в Execute_Command_File. После выполнения скрипта запрошенный сеанс открывается и tailfработает.

Проблема в том, что когда я пытаюсь выйти из tailf(ctrl+C), терминал закрывается.

Пробовал добавить /bin/bashв конце Execute_Command_File, не помогает. И конечно пробовал tail -f/F, тоже не работает...

Есть идеи?

решение1

Бывает, что tailумирает из-за CTRL+C, но он также отправляется (SINGINT) родителю, bash. Поскольку по умолчанию bash умирает при получении такого сигнала, вам придется заменить поведение по умолчанию bashпри его получении.

Использоватьловушкавстроенная команда для bash(1)изменения этого.

Следующий скрипт tailf-ctrl.sh является демонстрационным и показывает ответ:

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

Обратите внимание, что:

  1. SIGINTэто сигнал, связанный с CTRL+C
  2. первыйловушкаустановить пользовательское действие, связанное с сигналом SIGINT
  3. второйловушкасбросить поведение сигнала SIGINT по умолчанию

Вывод скрипта:

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

это показывает, что второй файл записан таким образом, что конец скрипта достигается, когда tailумирает из-за CTRL-C.

если вы закомментируете первую команду trap, вы увидите, что возникла ваша проблема: bash немедленно завершает работу, а вывод должен быть следующим:

$ bash tailf-ctrl.sh 
hello
^C
$

Связанный контент