这个bash脚本函数做了什么

时间:2012-05-07 10:30:03

标签: bash shell scripting

我是shell脚本的新手,我在给定的脚本文件中找到了这个函数。

##############################
# rotate_daily(filename)
rotate_daily() {
  _code=0
  _file_src=$1

  _today=`date '+%Y-%m-%d'`
  _file_dest=${_file_src}.${_today}
  if [ -f ${_file_dest} ]; then
    printk "rotate_daily(): ${_file_dest} already exist"
    _code=1
  else
    if [ -f ${_file_src} ]; then
      printk "rotate_daily(): ${_file_src} => ${_file_dest}"
      cp -p ${_file_src} ${_file_dest}
      _code=$?
      >${_file_src}
    fi
  fi
}

我知道这是一种从一个位置到另一个位置的应对文件。但是,它不是在旋转吗?有人可以解释一下它到底是做什么的。

提前感谢任何帮助

2 个答案:

答案 0 :(得分:1)

它将_file_src复制到位置file_dest,除非_file_dest已存在。将打印一条信息性消息,告诉您文件是否已存在或是否将复制file_src_。仅当文件是文件时,它才会移动_file_src。

编辑:忘了提到命令>{_file_src}的作用 - 它只是清除了源文件的内容。因此,您将_file_src的内容最终移至file_dest,_file_src将为空。我无法理解为什么不简单地做一个移动(使用mv)然后创建一个空文件,但这是你的问题。

答案 1 :(得分:1)

如果带有时间戳的文件已存在,则此代码段不会执行任何操作,只能通过printk打印消息来指示。如果它不存在,则将源文件复制到该文件并截断​​源文件。我猜你不太了解的是:

>${_file_src}

该行在复制后截断原始文件。请注意,存在竞争条件,并且在副本和截断之间写入文件的任何数据都将丢失。