【发布时间】:2016-01-07 11:09:51
【问题描述】:
Bash 是“一种函数式编程语言”,它没有类。一世
设法使用Closures 进行封装,但我也想做一些
自省也找到docker_父/超级/基本功能(如果你知道添加
cmets 来正确定义它)。
我做到了这一点,但有一个肮脏的黑客super=${FUNCNAME}。有什么解决办法
使用某种PARENT_FUNCNAME?我有这样的文件 docker_.sh:
#!/usr/bin/env bash
function docker_ {
local super=${FUNCNAME}
function hello {
echo "INFO" "do ${super}${FUNCNAME}"
}
function install {
echo "INFO" "do ${super}${FUNCNAME}"
#sudo curl -sSL https://get.docker.com/ | sh || exit 1
}
function run {
echo "INFO" "do ${super}${FUNCNAME}"
#docker run -d -p 3306:3306 ${DOCKER_IMAGE_NAME} /docker.sh run_mysql
}
${@}
}
${@}
得到了一些结果:
$ ./docker_.sh docker_ hello
INFO do docker_hello
$ ./docker_.sh docker_ run
INFO do docker_run
$ ./docker_.sh docker_ install
INFO do docker_install
已解决
使用
${FUNCNAME[1]}
${FUNCNAME[@]:0:${#FUNCNAME[@]}-1} get all list beside main
代码:
#!/usr/bin/env bash
function docker_ {
function hello {
echo "INFO" "do ${FUNCNAME[1]} ${FUNCNAME}"
}
function install {
echo "INFO" "do > ${FUNCNAME[@]:0:${#FUNCNAME[@]}-1} "
#sudo curl -sSL https://get.docker.com/ | sh || exit 1
}
function run {
echo "INFO" "do > ${FUNCNAME[@]:0:${#FUNCNAME[@]}-1} "
#docker run -d -p 3306:3306 ${DOCKER_IMAGE_NAME} /docker.sh run_mysql
}
${@}
}
${@}
得到了一些结果:
➜ ./docker_.sh docker_ hello
INFO do docker_ hello
➜ ./docker_.sh docker_ install
INFO do > install docker_
➜ ./docker_.sh docker_ run
INFO do > run docker_
【问题讨论】:
标签: bash closures lexical-closures