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                          
======================================================================


Reply via email to