A NOTE has been added to this issue. ====================================================================== http://austingroupbugs.net/view.php?id=1161 ====================================================================== Reported By: steffen Assigned To: ====================================================================== Project: 1003.1(2016)/Issue7+TC2 Issue ID: 1161 Category: Shell and Utilities Type: Clarification Requested Severity: Editorial Priority: normal Status: Resolved Name: steffen Organization: User Reference: Section: command Page Number: 2596 Line Number: 84274 ff. Interp Status: --- Final Accepted Text: See http://austingroupbugs.net/view.php?id=1161#c4220 Resolution: Accepted As Marked Fixed in Version: ====================================================================== Date Submitted: 2017-09-04 13:09 UTC Last Modified: 2019-01-25 00:53 UTC ====================================================================== Summary: command -v must find something executable ======================================================================
---------------------------------------------------------------------- (0004225) steffen (reporter) - 2019-01-25 00:53 http://austingroupbugs.net/view.php?id=1161#c4225 ---------------------------------------------------------------------- I say good night by posting the solution that the wonderful kre has worked out for me, i am using it in some of my scripts. May it help other POSIX shell programmers. The Unix/POSIX shell is such a flexible beast, i am afraid i will never land there with the syntax of my mailx. P.S.: i have to add that i never have seen something similar in other code. # which(1) not standardized, command(1) -v may return non-executable: unroll! acmd_test() { __acmd "${1}" 1 0 0; } acmd_test_fail() { __acmd "${1}" 1 1 0; } acmd_set() { __acmd "${2}" 0 0 0 "${1}"; } acmd_set_fail() { __acmd "${2}" 0 1 0 "${1}"; } acmd_testandset() { __acmd "${2}" 1 0 0 "${1}"; } acmd_testandset_fail() { __acmd "${2}" 1 1 0 "${1}"; } thecmd_set() { __acmd "${2}" 0 0 1 "${1}"; } thecmd_set_fail() { __acmd "${2}" 0 1 1 "${1}"; } thecmd_testandset() { __acmd "${2}" 1 0 1 "${1}"; } thecmd_testandset_fail() { __acmd "${2}" 1 1 1 "${1}"; } __acmd() { pname=${1} dotest=${2} dofail=${3} verbok=${4} varname=${5} if [ "${dotest}" -ne 0 ]; then eval dotest=\$${varname} if [ -n "${dotest}" ]; then [ -n "${VERBOSE}" ] && [ ${verbok} -ne 0 ] && msg ' . ${%s} ... %s' "${pname}" "${dotest}" return 0 fi fi oifs=${IFS} IFS=: [ -n "${noglob_shell}" ] && set -o noglob set -- ${PATH} [ -n "${noglob_shell}" ] && set +o noglob IFS=${oifs} for path do if [ -z "${path}" ] || [ "${path}" = . ]; then if [ -d "${PWD}" ]; then path=${PWD} else path=. fi fi if [ -f "${path}/${pname}" ] && [ -x "${path}/${pname}" ]; then [ -n "${VERBOSE}" ] && [ ${verbok} -ne 0 ] && msg ' . ${%s} ... %s' "${pname}" "${path}/${pname}" [ -n "${varname}" ] && eval ${varname}="${path}/${pname}" return 0 fi done # We may have no builtin string functions, we yet have no programs we can # use, try to access once from the root, assuming it is an absolute path if # that finds the executable if ( cd && [ -f "${pname}" ] && [ -x "${pname}" ] ); then [ -n "${VERBOSE}" ] && [ ${verbok} -ne 0 ] && msg ' . ${%s} ... %s' "${pname}" "${pname}" [ -n "${varname}" ] && eval ${varname}="${pname}" return 0 fi [ -n "${varname}" ] && eval ${varname}= [ ${dofail} -eq 0 ] && return 1 msg 'ERROR: no trace of utility '"${pname}" exit 1 } msg() { fmt=${1} shift printf >&2 -- "${fmt}\n" "${@}" } Issue History Date Modified Username Field Change ====================================================================== 2017-09-04 13:09 steffen New Issue 2017-09-04 13:09 steffen Name => steffen 2017-09-04 13:09 steffen Section => command 2017-09-04 13:09 steffen Page Number => 2596 2017-09-04 13:09 steffen Line Number => 84274 ff. 2017-09-04 15:49 kre Note Added: 0003821 2017-09-05 06:58 stephane Note Added: 0003823 2017-09-05 08:30 stephane Note Added: 0003824 2017-09-05 12:34 steffen Note Added: 0003825 2017-09-05 12:39 steffen Note Added: 0003826 2017-09-05 12:47 kre Note Added: 0003827 2017-09-05 13:37 steffen Note Added: 0003828 2017-09-05 15:37 chet_ramey Note Added: 0003829 2017-09-05 15:41 stephane Note Added: 0003830 2017-09-05 16:01 stephane Note Added: 0003831 2017-09-05 16:36 stephane Note Added: 0003832 2017-09-05 17:30 stephane Note Added: 0003833 2017-09-05 20:17 steffen Note Added: 0003834 2017-09-05 20:19 steffen Note Added: 0003835 2017-09-05 20:27 kre Note Added: 0003836 2017-09-05 20:29 chet_ramey Note Added: 0003837 2017-09-05 21:27 eblake Note Added: 0003838 2017-09-05 21:50 kre Note Added: 0003839 2017-09-05 21:52 kre Note Edited: 0003839 2017-09-05 22:21 eblake Note Added: 0003840 2017-09-05 22:23 Don Cragun Note Added: 0003841 2017-09-05 22:24 Don Cragun Note Deleted: 0003841 2017-09-06 00:00 kre Note Added: 0003842 2017-09-06 00:00 kre Note Deleted: 0003839 2017-09-06 08:30 stephane Note Added: 0003843 2017-09-06 08:32 stephane Note Edited: 0003843 2017-09-06 09:30 stephane Note Added: 0003844 2017-09-06 09:37 stephane Note Added: 0003845 2017-09-06 09:50 joerg Note Added: 0003846 2017-09-06 09:50 joerg Note Edited: 0003846 2017-09-06 09:50 joerg Note Edited: 0003846 2017-09-06 09:54 stephane Note Edited: 0003845 2017-09-06 12:55 steffen Note Added: 0003847 2017-09-06 13:41 stephane Note Added: 0003848 2017-09-07 17:31 kre Note Deleted: 0003842 2017-09-07 17:58 kre Note Added: 0003849 2017-09-07 18:29 chet_ramey Note Added: 0003850 2017-09-07 21:17 kre Note Added: 0003851 2017-09-07 21:18 kre Note Edited: 0003851 2017-09-09 19:10 chet_ramey Note Added: 0003852 2018-04-25 17:57 McDutchie Note Added: 0003997 2019-01-24 17:11 nick Note Added: 0004220 2019-01-24 17:11 nick Interp Status => --- 2019-01-24 17:11 nick Final Accepted Text => See http://austingroupbugs.net/view.php?id=1161#c4220 2019-01-24 17:11 nick Status New => Resolved 2019-01-24 17:11 nick Resolution Open => Accepted As Marked 2019-01-24 17:12 nick Tag Attached: tc3-2008 2019-01-24 23:33 kre Note Added: 0004223 2019-01-25 00:05 kre Note Added: 0004224 2019-01-25 00:53 steffen Note Added: 0004225 ======================================================================