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