Есть скрипт 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
Обратите внимание, что:
- SIGINTэто сигнал, связанный с CTRL+C
- первыйловушкаустановить пользовательское действие, связанное с сигналом SIGINT
- второйловушкасбросить поведение сигнала SIGINT по умолчанию
Вывод скрипта:
$ bash tailf-ctrl.sh
hello
^CCTRL-C pressed!
Hello after
это показывает, что второй файл записан таким образом, что конец скрипта достигается, когда tail
умирает из-за CTRL-C
.
если вы закомментируете первую команду trap, вы увидите, что возникла ваша проблема: bash немедленно завершает работу, а вывод должен быть следующим:
$ bash tailf-ctrl.sh
hello
^C
$