【问题标题】:Could someone help explain what this Bash script is doing?有人可以帮助解释这个 Bash 脚本在做什么吗?
【发布时间】:2017-05-09 23:22:10
【问题描述】:

我是 linux 新手,虽然我熟悉脚本中锁定文件的概念,但我在另一个脚本中遇到了该代码,并认为它非常酷,尽管我不知道它是如何工作的。有没有人能详细了解一下 cleanup file 和 finalize 函数在做什么?

与锁文件的 if else 语句相反

cleanup_file="$(mktemp -q)"
finalize()
{ 
  set +e
  if test -f "$cleanup_file"
  then
    while read f
    do
      unlink "$f"
    done < "$cleanup_file"
    unlink "$cleanup_file"
  fi
}

trap 'finalize' HUP INT QUIT TERM EXIT

【问题讨论】:

  • 为了使您的问题有意义,必须在您的脚本中使用使用cleanup_file="$(mktemp -q)" 创建的temp 文件。 trap 调用finalize (基本上是在脚本退出或以其他方式被杀死时)。大概有符号链接写入临时文件,这是 finalize 函数摆脱的。

标签: linux bash


【解决方案1】:

finalize 函数不处理任何锁。它只是删除名称在清理文件中的所有文件。它还会删除清理文件。

似乎较大的脚本将临时文件的名称附加到清理文件中,trap 信号处理程序负责在脚本终止时清理它们。

【讨论】:

  • 看起来临时文件必须包含在脚本执行期间创建的符号链接列表。
  • 鉴于脚本也在清理文件上调用unlink,我猜unlinkrm 同义使用。
  • 谢谢!现在有道理了!虽然你能详细说明 unlink 与 rm 同义吗?
  • unlinkrm 的更简单版本,它仅适用于文件,而不适用于目录。它只是为传递的文件调用unlink 系统调用。 rm 是一个更强大的实用程序,可以处理文件、目录、递归删除等。rm fileunlink file 是等价的。
猜你喜欢
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2018-07-23
  • 2020-01-31
  • 2021-04-07
  • 2010-12-17
  • 2014-12-06
相关资源
最近更新 更多