수색…
소개
Bash에서 일반적인 디자인 패턴을 구현하십시오.
게시 / 구독 (Pub / Sub) 패턴
Bash 프로젝트가 라이브러리로 변하면 새로운 기능을 추가하기가 어려울 수 있습니다. 함수 이름, 변수 및 매개 변수는 일반적으로 함수 이름, 변수 및 매개 변수를 사용하는 스크립트에서 변경해야합니다. 이와 같은 시나리오에서는 코드를 분리하고 이벤트 기반 디자인 패턴을 사용하는 것이 좋습니다. 상기 패턴에서, 외부 스크립트는 이벤트에 가입 할 수있다. 해당 이벤트가 트리거 (게시)되면 스크립트는 이벤트에 등록한 코드를 실행할 수 있습니다.
pubsub.sh :
#!/usr/bin/env bash
#
# Save the path to this script's directory in a global env variable
#
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
#
# Array that will contain all registered events
#
EVENTS=()
function action1() {
echo "Action #1 was performed ${2}"
}
function action2() {
echo "Action #2 was performed"
}
#
# @desc :: Registers an event
# @param :: string $1 - The name of the event. Basically an alias for a function name
# @param :: string $2 - The name of the function to be called
# @param :: string $3 - Full path to script that includes the function being called
#
function subscribe() {
EVENTS+=("${1};${2};${3}")
}
#
# @desc :: Public an event
# @param :: string $1 - The name of the event being published
#
function publish() {
for event in ${EVENTS[@]}; do
local IFS=";"
read -r -a event <<< "$event"
if [[ "${event[0]}" == "${1}" ]]; then
${event[1]} "$@"
fi
done
}
#
# Register our events and the functions that handle them
#
subscribe "/do/work" "action1" "${DIR}"
subscribe "/do/more/work" "action2" "${DIR}"
subscribe "/do/even/more/work" "action1" "${DIR}"
#
# Execute our events
#
publish "/do/work"
publish "/do/more/work"
publish "/do/even/more/work" "again"
운영:
chmod +x pubsub.sh
./pubsub.sh
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow