模拟系统"date"命令后脚本执行缓慢



Hellow fellow Stack users,

我正在使用函数"setup_date"来更改自定义执行的日期命令。这是为了模拟它并测试一些 bash 脚本,它们的执行必须始终使用相同的日期才能比较结果。

所以这种方法在 ssh 或 sftp 命令模拟中效果很好。但这一次,刚"date"命令替换之后,脚本的执行就变得非常慢了!这是什么原因呢?linux 系统是否经常调用"date"命令供内部使用?

问候

#
#replace a command with previousy defined mock one
#
mock_cmd() {
  local command="${1:-}"
  local override="${2:-}"
  # Remove target function if one is already set
  unset ${command}
  # Create a wrapper function called "${command}"
  eval "${command}() { ${override} ${@}; }"
}

#mock the date command
#1- date formatting
#There has to be a variable: dateFile!
date_mock_SP() {
    date "${1}" -r ${dateFile}
}

#
#1- date ex: 201203101513
#2- dateFile path
setup_date() {
    touch -t "${1}" ${2}/dateFile
    export dateFile=${2}/dateFile
}

EXECUTION : 
mock_cmd "date" "date_mock_SP"
setup_date "201203101513" ${pwd}/in
Date=$(date +"%y%j")
echo $Date
Date=$(date +"%y%j")
echo $Date
exit 1

mock_cmd比你需要的更脆弱和复杂。您已经在定义函数 date_mock_SP ;只需将其命名为 date ,该函数将覆盖该命令。在函数内部,使用 command date 以避免无限递归。

date () { command date "$1" -r "$dateFile"; }
setup_date "201203101513" "$pwd/in"  # uses the function, not the executable, date
unset -f date

最新更新