diff --git a/iocsh.bash b/iocsh.bash old mode 100755 new mode 100644 index 174f3761e48b17d60ee3ad9c9bad7c04039f9ec7..b68b90ff1aeb3222074b9fa24d58bc6d0b2d97b2 --- a/iocsh.bash +++ b/iocsh.bash @@ -1,6 +1,5 @@ #!/bin/bash - declare -gr SC_SCRIPT="$(realpath "$0")" declare -gr SC_SCRIPTNAME=${0##*/} declare -gr SC_TOP="$(dirname "$SC_SCRIPT")" @@ -14,7 +13,6 @@ set +a . ${SC_TOP}/iocsh_functions - case $1 in ( -h | "-?" | -help | --help ) help @@ -29,64 +27,34 @@ case $1 in ;; esac -# Default, use the default EPICS_BASE in env setup script -# echo ${EPICS_BASE} -# What about EPICS_BASE exists, however, require doesn't compile with that base...? - - if [[ $(checkIfDir ${EPICS_BASE}) -eq "$NON_EXIST" ]]; then - printf "${EPICS_BASE} is defined to use. \n"; - printf "HOWEVER, ${SC_SCRIPTNAME} cannot find the real directory at EPICS_BASE at ${EPICS_BASE}\n"; + printf "EPICS_BASE is defined to use. \n"; printf "Please check your environment!\n"; exit; fi declare -g RUNNING_EPICS_BASE_VER=${EPICS_BASE##*/*-} -declare -g RUNNING_REQUIRE_PATH=${EPICS_MODULES}/${REQUIRE}/${REQUIRE_VERSION}/R${RUNNING_EPICS_BASE_VER} - -declare -g SOFTIOC_CMD="softIoc" -declare -g SOFTIOC_ARGS="-D ${EPICS_BASE}/dbd/softIoc.dbd" +declare -g RUNNING_REQUIRE_PATH=${REQUIRE_PATH}/R${RUNNING_EPICS_BASE_VER} STARTUP=/tmp/${SC_SCRIPTNAME}_${IOC}_startup.$BASHPID +declare -a ioc_env=(PWD EPICS_HOST_ARCH REQUIRE_PATH EPICS_CA_ADDR_LIST); + trap "softIoc_end" EXIT SIGTERM { - echo "# date=\"$(date)\"" - echo "# user=\"${USER:-$(whoami)}\"" - - for var in PWD EPICS_HOST_ARCH REQUIRE_PATH EPICS_CA_ADDR_LIST - do - echo "# $var=\"${!var}\"" - done - + printIocEnv "${ioc_env}" - LIBPREFIX=lib - LIBPOSTFIX=.so + loadRequire + loadFiles "$@" - REQUIRE_LIB=${RUNNING_REQUIRE_PATH}/lib/${EPICS_HOST_ARCH}/${LIBPREFIX}${REQUIRE}${LIBPOSTFIX} - REQUIRE_DBD=${REQUIRE_LIB%/lib/*}/dbd/${REQUIRE}.dbd - - LDCMD="dlload" - - echo "$LDCMD $REQUIRE_LIB" - echo "dbLoadDatabase $REQUIRE_DBD" - echo "${REQUIRE%-*}_registerRecordDeviceDriver" - - loadFiles "$@" - - if [ "$init" != NO ] - then + if [ "$init" != NO ]; then echo "iocInit" fi -} > ${STARTUP} +} > ${STARTUP} - - -command='${SOFTIOC_CMD} ${SOFTIOC_ARGS} "${STARTUP}"' ulimit -c unlimited -eval "${command}" 2>&1 - +softIoc -D ${EPICS_BASE}/dbd/softIoc.dbd "${STARTUP}" 2>&1 diff --git a/iocsh_functions b/iocsh_functions index cd2b6914a2a45fce2daf38bcba92818155e00bd9..58ccaf69831f93c451fccd9792792657e5fd4d73 100644 --- a/iocsh_functions +++ b/iocsh_functions @@ -120,6 +120,40 @@ function subst () { echo ${subst#,} } + +function printIocEnv() { + + local var=""; + + printf "# date=\"$(date)\"\n" + printf "# user=\"${USER:-$(whoami)}\"\n" + + for var in PWD EPICS_HOST_ARCH REQUIRE_PATH EPICS_CA_ADDR_LIST + do + printf "# $var=\"${!var}\"\n" + done + printf "\n"; + +} + +function loadRequire() { + + local libPrefix=lib + local libPostfix=.so + local libName=${libPrefix}${REQUIRE}${libPostfix} + + local require_lib=${RUNNING_REQUIRE_PATH}/lib/${EPICS_HOST_ARCH}/${libName} + local require_dbd=${RUNNING_REQUIRE_PATH}/dbd/${REQUIRE}.dbd + + + local load_cmd="dlload" + + printf "${load_cmd} ${require_lib}\n"; + printf "dbLoadDatabase ${require_dbd}\n" + printf "${REQUIRE%-*}_registerRecordDeviceDriver\n\n" + +} + function loadFiles () { while [ "$#" -gt 0 ] do diff --git a/iocsh_v1.bash b/iocsh_v1.bash new file mode 100755 index 0000000000000000000000000000000000000000..174f3761e48b17d60ee3ad9c9bad7c04039f9ec7 --- /dev/null +++ b/iocsh_v1.bash @@ -0,0 +1,92 @@ +#!/bin/bash + + +declare -gr SC_SCRIPT="$(realpath "$0")" +declare -gr SC_SCRIPTNAME=${0##*/} +declare -gr SC_TOP="$(dirname "$SC_SCRIPT")" +declare -g STARTUP="" + + +set -a +. ${SC_TOP}/ess-env.conf +set +a + +. ${SC_TOP}/iocsh_functions + + + +case $1 in + ( -h | "-?" | -help | --help ) + help + ;; + ( -v | -ver | --ver | -version | --version ) + version + ;; + ( -3.* ) + unset EPICS_BASE; + EPICS_BASE=$(select_epics_base "$1"); + shift + ;; +esac + +# Default, use the default EPICS_BASE in env setup script +# echo ${EPICS_BASE} +# What about EPICS_BASE exists, however, require doesn't compile with that base...? + + +if [[ $(checkIfDir ${EPICS_BASE}) -eq "$NON_EXIST" ]]; then + + printf "${EPICS_BASE} is defined to use. \n"; + printf "HOWEVER, ${SC_SCRIPTNAME} cannot find the real directory at EPICS_BASE at ${EPICS_BASE}\n"; + printf "Please check your environment!\n"; + exit; +fi + +declare -g RUNNING_EPICS_BASE_VER=${EPICS_BASE##*/*-} +declare -g RUNNING_REQUIRE_PATH=${EPICS_MODULES}/${REQUIRE}/${REQUIRE_VERSION}/R${RUNNING_EPICS_BASE_VER} + +declare -g SOFTIOC_CMD="softIoc" +declare -g SOFTIOC_ARGS="-D ${EPICS_BASE}/dbd/softIoc.dbd" + +STARTUP=/tmp/${SC_SCRIPTNAME}_${IOC}_startup.$BASHPID + +trap "softIoc_end" EXIT SIGTERM + +{ + echo "# date=\"$(date)\"" + echo "# user=\"${USER:-$(whoami)}\"" + + for var in PWD EPICS_HOST_ARCH REQUIRE_PATH EPICS_CA_ADDR_LIST + do + echo "# $var=\"${!var}\"" + done + + + LIBPREFIX=lib + LIBPOSTFIX=.so + + REQUIRE_LIB=${RUNNING_REQUIRE_PATH}/lib/${EPICS_HOST_ARCH}/${LIBPREFIX}${REQUIRE}${LIBPOSTFIX} + REQUIRE_DBD=${REQUIRE_LIB%/lib/*}/dbd/${REQUIRE}.dbd + + LDCMD="dlload" + + echo "$LDCMD $REQUIRE_LIB" + echo "dbLoadDatabase $REQUIRE_DBD" + echo "${REQUIRE%-*}_registerRecordDeviceDriver" + + loadFiles "$@" + + if [ "$init" != NO ] + then + echo "iocInit" + fi + + +} > ${STARTUP} + + + +command='${SOFTIOC_CMD} ${SOFTIOC_ARGS} "${STARTUP}"' +ulimit -c unlimited +eval "${command}" 2>&1 +