小编num*_*and的帖子

错误的 $LINENO 被困函数

我正在为自己编写 Bash 脚本来学习脚本。在某些时候,如果脚本被终止,我需要添加陷阱以清除不需要的目录和文件。但是,由于某种原因我不明白,trap 调用清理函数——clean_a()当脚本被杀死但$LINENO指向清理函数本身中的一行,而不是函数本身archieve_it()时——当脚本被杀死时。

预期行为:

  1. 运行脚本
  2. Ctrl+C
  3. 陷阱缓存Ctrl+C并调用clean_a()函数
  4. clean_a()函数回显行号,Ctrl+C被按下。让它成为第 10 行archieve_it()

实际发生的情况:

  1. 运行脚本
  2. Ctrl+C
  3. 陷阱缓存Ctrl+C并调用clean_a()函数
  4. clean_a()回显一个不相关的行号。比如说,clean_a()函数中的第 25 行。

这是作为我脚本一部分的示例:

archieve_it () {
  trap 'clean_a $LINENO $BASH_COMMAND'\
                SIGHUP SIGINT SIGTERM SIGQUIT
  for src in ${sources}; do
   mkdir -p "${dest}${today}${src}"
   if [[ "$?" -ne 0 ]] ; then …
Run Code Online (Sandbox Code Playgroud)

bash trap

7
推荐指数
2
解决办法
6340
查看次数

标签 统计

bash ×1

trap ×1