首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尽管被发送了适当的退出状态,陷阱并不总是会删除我的tempfile。

尽管被发送了适当的退出状态,陷阱并不总是会删除我的tempfile。
EN

Stack Overflow用户
提问于 2015-10-16 19:35:02
回答 1查看 369关注 0票数 0

这是我在这个网站上的第一个问题,所以如果它很差,我很抱歉,我会接受你的建议来改进我未来的问题。

背景:我的脚本应该接受一个传入的参数,比如-rows,财政,-r,它不应该接受大写字母的变化,其中任何一个。如果找到一个大写变化,它应该退出。如果除了-r或-c之外,它还应该退出(我认为第一个语句是多余的,因为-r和-R在ascii表上由32隔开)。不仅脚本应该退出,而且应该删除以前创建的临时文件。我现在离得太远了,因为我想说的很贴切。

我有一个陷阱,设置为强制删除临时文件,状态为1退出,状态为1和15触发。

这是一个陷阱:

代码语言:javascript
代码运行次数:0
运行
复制
trap "rm -f $tempFile; exit 1" 1 2 15

以下是应该捕获-a的条件语句-anyLetters但是-r&&c

代码语言:javascript
代码运行次数:0
运行
复制
if [ "${1:0:2}" != '-r' ] && [ "${1:0:2}" != '-c' ]
then
    echo "Usage: stats {-rows|-cols} [file]" >&2
    exit 1
fi

如果我输入命令以-r的形式从命令提示符调用脚本,脚本将按其应有的方式运行,并且在整个脚本中需要时陷阱也会工作。它移除了诱饵文件和所有东西。

但是,如果我用-R或-C调用脚本,它就会以使用错误的形式退出,但是陷阱不会删除这个tempfile。为什么?我有什么不明白的吗?电脑看到了什么?

请告诉我你还想看什么。我很感激你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 20:07:27

您正在捕获信号1、2和15。在我的机器(x86 Linux)上,这些信号对应于SIGHUP、SIGINT和SIGTERM。

但是您的if语句没有发送任何这些信号;它只是退出。我不知道你为什么要这样做会产生信号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33178309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档