Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带陷阱的Case语句(BASH)_Bash - Fatal编程技术网

带陷阱的Case语句(BASH)

带陷阱的Case语句(BASH),bash,Bash,如果把“case”和“trap”语句结合在一起,我仍然不太理解它们的概念 我想做什么: 触发trap语句时,它将删除脚本已创建的每个TMP(临时文件) 然而,当我试图运行这段代码时,有时脚本仍然会留下一些TMP文件 if [ "$#" -eq 1 ]; then TMP=./TMP$$ cat $FILENAME > $TMP case "$1" in -b*)awesomeFunction exit 0;; -B*)echo "E

如果把“case”和“trap”语句结合在一起,我仍然不太理解它们的概念

我想做什么:

触发trap语句时,它将删除脚本已创建的每个TMP(临时文件)

然而,当我试图运行这段代码时,有时脚本仍然会留下一些TMP文件

if [ "$#" -eq 1 ]; then 
    TMP=./TMP$$
    cat $FILENAME > $TMP
    case "$1" in
        -b*)awesomeFunction exit 0;;
        -B*)echo "ERROR!" >&2; exit 1;;
        *)echo "ERROR!" >&2; exit 1;;
    esac
    trap "rm -f $TMP" INT HUP TERM
fi
输出示例(触发trap语句后)

正确输出:

file1   file2
我的输出:

file1   file2  TMP23242  TMP24452

我把陷阱陈述放错地方了吗?任何人都可以给我一个建议,如何使脚本正确运行陷阱语句?谢谢。

将陷阱语句放在代码的早期;在触发其中一个中断之前,不会执行内容。

您可能希望使用
EXIT
而不是
INT-HUP TERM
——特定于bash的
EXIT
信号将触发处理程序,无论shell如何退出,无论是由于错误还是成功完成脚本。此外,它也不会删除所有TMP文件,“就是那个由那个脚本运行而产生的那个。”@glennjackman:是的,这就是我的意思。我是否正确地将陷阱语句放在了那里?您的
if
fi
语句不平衡。您的
fi
if
多。我会将trap语句移到
TMP=…
下面的一行。正如mpez0所回答的,如果您的脚本在执行trap语句之前出错,它如何知道如何运行处理程序?您的意思是在if行的正下方?它如何知道$TMP tho?将它放在分配给
TMP
的行之后。它可以工作!谢谢,我之前不知道陷阱必须直接放在
TMP=
下面。我想它会被直接移除。