Bash は「一種の関数型プログラミング言語」であり、クラスはありません。Closuresでカプセル化を使用することができましたが、親/スーパー/ベース関数も見つけるためにイントロスペクションを行いたいと思いdocker_
ます(これを正しく定義するためにコメントを追加することがわかっている場合)。
私はこれを管理しましたが、汚いハック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_