我有 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
注意:
- 信号情报是与 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
$