从远程脚本退出 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. 信号情报是与 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
$

相关内容