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

376
igor

Есть сценарий 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, тоже не работает ...

Есть идеи?

0

1 ответ на вопрос

1
bzimage

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

Используйте встроенную команду trap,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 $ 
Работал как положено, спасибо. Не был знаком с `ловушкой`, кажется очень полезным igor 6 лет назад 0

Похожие вопросы