Bash 为什么我的陷阱不起作用?

Bash 为什么我的陷阱不起作用?,bash,bash-trap,Bash,Bash Trap,我写了以下脚本: #!/bin/bash sleep 15 function_signalr() { date date | awk '{printf "%-15s\n", $2}' } trap "function_signalr" 10 当我通过“process&”启动流程时,它会运行,并给出PID。 我确实杀死了-10PID,但我的陷阱不起作用。进程被终止,但陷阱没有出现。没有给出日期消息。如果您有任何建议,我将不胜感激。您的陷阱不起作用,因为shell还不知道 您需要定义trap

我写了以下脚本:

#!/bin/bash
sleep 15

function_signalr()
{
date
date | awk '{printf "%-15s\n", $2}' 
}

trap "function_signalr" 10
当我通过“process&”启动流程时,它会运行,并给出PID。
我确实杀死了-10PID,但我的陷阱不起作用。进程被终止,但陷阱没有出现。没有给出日期消息。如果您有任何建议,我将不胜感激。

您的
陷阱不起作用,因为shell还不知道

您需要定义
trap
函数,设置
trap
,然后编写代码

#!/bin/bash

function_signalr()
{
date
date | awk '{printf "%-15s\n", $2}' 
}

trap "function_signalr" 10

# Code follows now
sleep 15

此外,请注意,
sleep
是阻塞,这意味着如果执行
kill-10PID
,则
陷阱将在
sleep
完成之前不会执行。

谢谢。我已经更改了脚本的顺序,现在在sleeps完成之后,执行日期。是否可以终止睡眠并立即执行陷阱,还是我必须始终等待上一个命令完成?@user3214667我不确定您在这里想要实现什么。如上所述,
sleep
正在阻塞,因此在您睡眠时不会执行
trap
。但是您可以将
睡眠
放在一个循环中,以便在前面执行
陷阱
for((i=1;我只是在做一个bash课程,有些部分很棘手。谢谢您的帮助。