summaryrefslogtreecommitdiffhomepage
path: root/subr/ex_rtl_complex.subr
diff options
context:
space:
mode:
Diffstat (limited to 'subr/ex_rtl_complex.subr')
-rw-r--r--subr/ex_rtl_complex.subr98
1 files changed, 51 insertions, 47 deletions
diff --git a/subr/ex_rtl_complex.subr b/subr/ex_rtl_complex.subr
index 869cbba7..682a950e 100644
--- a/subr/ex_rtl_complex.subr
+++ b/subr/ex_rtl_complex.subr
@@ -1,5 +1,5 @@
#
-# set -o noglob is assumed.
+# set +o errexit -o noglob is assumed.
#
ex_rtl_check_path_vars() {
@@ -27,56 +27,61 @@ ex_rtl_clean_env() {
ex_rtl_unset_vars $(ex_rtl_lfilter "${_env_vars}" "${_env_vars_except}");
};
-ex_rtl_kill_tree() {
- local _pid="${1}" _signal="TERM" _pid_child="" _pid_top="";
- for _pid_top in $(pgrep -P "${_pid}"); do
- for _pid_child in $(pgrep -P "${_pid_top}" 2>/dev/null); do
- _pids_killed="${_pids_killed:+${_pids_killed} }${_pid_child}"; kill "-${_signal}" "${_pid_child}" 2>/dev/null;
- done;
- _pids_killed="${_pids_killed:+${_pids_killed} }${_pid_top}"; kill "-${_signal}" "${_pid_top}" 2>/dev/null;
- done;
+ex_rtl_exists_any() {
+ local _subdir="${1}"; shift;
+ while [ "${#}" -gt 0 ]; do
+ if [ -e "${_subdir}/${1}" ]; then
+ return 0;
+ else
+ shift;
+ fi;
+ done; return 1;
};
-ex_rtl_lfilter() {
- local _list="${1}" _filter="${2}" _lnew="" _litem="" _litem_filter="" _filterfl="";
- if [ -z "${_filter}" ]; then
- echo "${_list}"; return 0;
- else for _litem in ${_list}; do
- _filterfl=0;
- for _litem_filter in ${_filter}; do
- if [ "${_litem_filter}" = "${_litem}" ]; then
- _filterfl=1; break;
+ex_rtl_export_vars() {
+ local _unsetfl=0; [ "x${1}" = "x-u" ] && { _unsetfl=1; shift; };
+ while [ "${#}" -ge 2 ]; do
+ if [ -n "${2}" ]; then
+ if [ "${_unsetfl:-0}" -eq 0 ]; then
+ ex_rtl_set_var_unsafe "${1}" "${2}"; export "${1}";
+ else
+ unset "${1}";
fi;
- done;
- if [ "${_filterfl:-0}" -eq 0 ]; then
- _lnew="${_lnew:+${_lnew} }${_litem}";
fi;
- done; fi;
- echo "${_lnew}";
+ shift 2;
+ done;
};
-ex_rtl_lmatch() {
- local _cmp="${3}" IFS="${2}"; set -- ${1};
- while [ ${#} -gt 0 ]; do
- if [ "${1}" = "${_cmp}" ]; then
- return 0;
- fi; shift;
- done; return 1;
+ex_rtl_get_var_unsafe() {
+ local _vname="";
+ if [ "x${1}" = "x-u" ]; then
+ shift; _vname="$(ex_rtl_toupper "${1}")";
+ else
+ _vname="${1}";
+ fi;
+ eval echo \${${_vname}};
};
-ex_rtl_lsearch() {
- local _list="${1}" _filter="${2}" _lnew="" _litem="" _litem_filter="";
- if [ -z "${_filter}" ]; then
- echo "${_list}"; return 0;
- else for _litem in ${_list}; do
- for _litem_filter in ${_filter}; do
- if [ "${_litem_filter}" = "${_litem}" ]; then
- _lnew="${_lnew:+${_lnew} }${_litem}";
- break;
- fi;
+ex_rtl_head() {
+ local _pattern="${1}" _s="${2}";
+ while true; do
+ if [ "${_s%%${_pattern}}" = "${_s}" ]; then
+ break;
+ else
+ _s="${_s%%${_pattern}}";
+ fi;
+ done;
+ echo "${_s}";
+};
+
+ex_rtl_kill_tree() {
+ local _pid="${1}" _signal="TERM" _pid_child="" _pid_top="";
+ for _pid_top in $(pgrep -P "${_pid}"); do
+ for _pid_child in $(pgrep -P "${_pid_top}" 2>/dev/null); do
+ _pids_killed="${_pids_killed:+${_pids_killed} }${_pid_child}"; kill "-${_signal}" "${_pid_child}" 2>/dev/null;
done;
- done; fi;
- echo "${_lnew}";
+ _pids_killed="${_pids_killed:+${_pids_killed} }${_pid_top}"; kill "-${_signal}" "${_pid_top}" 2>/dev/null;
+ done;
};
ex_rtl_run_cmd_unsplit() {
@@ -91,10 +96,9 @@ ex_rtl_run_cmd_unsplit() {
};
ex_rtl_set_vars() {
- local _vname_dst="${1}" _vname_src_tmpls="${2}" \
- _vars_set_vname="${3}" _vname_src _vars_set_tmp="" \
- _vars_set_old="";
- for _vname_src in ${_vname_src_tmpls}; do
+ local _vars_set_vname="${1}" _vname_dst="${2}" _vname_src_tmpls="${3}" \
+ _vars_set_old="" _vars_set_tmp="" _vname_src="";
+ for _vname_src in $(ex_rtl_toupper "${_vname_src_tmpls}"); do
_vname_src="${_vname_src}_${_vname_dst}";
_vval_src="$(ex_rtl_get_var_unsafe "${_vname_src}")";
if [ -n "${_vval_src}" ]; then
@@ -103,7 +107,7 @@ ex_rtl_set_vars() {
fi;
done;
_vars_set_old="$(ex_rtl_get_var_unsafe "${_vars_set_vname}")";
- ex_rtl_set_var_unsafe "${_vars_set_vname}" \
+ ex_rtl_set_var_unsafe "${_vars_set_vname}" \
"${_vars_set_old:+${_vars_set_old} }${_vars_set_tmp}";
};