【发布时间】:2018-03-25 20:55:32
【问题描述】:
根据这个我不允许评论的问题:
Is it necessary to specify traps other than EXIT?
恕我直言,这是一个不完整的答案,因为它不涵盖以下常见情况:
TEMPDIR_OR_FILE=$(mktemp [ some switches and params and an XXX pattern] )
# ...so we want trap to do rm -rf ${TEMPDIR_OR_FILE}
给出的例子是:
# reset
trap 'excode=$?; cmd; trap - EXIT; echo $excode' EXIT HUP INT QUIT PIPE TERM
# ignore
trap 'excode=$?; trap "" EXIT; cmd; echo $excode' EXIT HUP INT QUIT PIPE TERM
这里的问题是单引号阻止你扩展${TEMPDIR_OR_FILE}
我认为复杂的是变量扩展的时间。我需要立即扩展${TEMPDIR_OR_FILE},但其他项目可能需要等到陷阱执行完毕。我该如何进行这项工作?
【问题讨论】:
-
顺便说一句——全大写的名称用于对操作系统或系统有意义的变量,而具有至少一个小写字符的名称保留给应用程序使用并保证不会修改行为POSIX 指定的工具。见pubs.opengroup.org/onlinepubs/9699919799/basedefs/…,第四段。
-
也就是说,为什么你想在定义陷阱时扩展
TEMPDIR_OR_FILE,而不是在它执行时?稍后在执行时执行此操作(通过将定义放在外部单引号内)将让您更改正在使用的临时文件。 -
根据我的经验,这不是问题。此类变量通常设置一次,甚至可能设置为只读,然后用于程序的其余部分。延迟扩展不会改变任何东西。为什么需要尽快解析?我可能会解决一些问题,但对于增加维护问题犹豫不决。
标签: bash