我对bash脚本还很陌生,而且我很难弄清楚为什么这个简单的陷阱没有按预期工作。为什么这个简单的bash陷阱失败
目标 - 创建可选等待期间,可以通过按CTRL + Ç被跳过。
紧迫的预期结果CTRL +Ç - 立即呼应 “!没时间午睡”并退出。按压的
实际结果CTRL + Ç - 立即回声 “小睡之上”并退出。
#!/bin/bash
nonap() {
echo "No time for napping!"
exit
}
trap nonap INT
echo "Sleeping for 5 seconds, hit ctrl-c to proceed now."
sleep 5
echo "Naptime over."
为什么我的陷阱函数没有被调用?
这工作对我很好。你的环境是什么? – Adam
我只是(在bash 3.2.25古老的Linux)尝试过了,在'trap.sh'保存你的代码,跑'庆典trap.sh',并得到了:'睡5秒,按Ctrl-C现在继续当我按照你的意料打断时,接着是“没时间打盹!”。 –
感谢您的反馈。至少我知道它*应该*按预期工作。我使用最新版本的Tinycore Linux和GNU bash,版本为4.0.33(1)的版本(i686-pc-linux-gnu)。在打开一个新终端时,声明-f nonap和trap都不返回任何输出。运行此脚本并获得“午睡”。输出,'trap'返回'陷阱 - “非AP” SIGINT'和'声明-f在我的脚本中定义nonap'返回的功能。 –