[GRASS-dev] hardcoded 'xterm': wrapper?

Hamish hamish_nospam at yahoo.com
Mon Aug 28 23:40:06 EDT 2006


Glynn Clements wrote:
> > > One minor point: I thought that using "which" was advised against,
> > > as it isn't present on all platforms.

Hamish wrote:
> > On what platforms is it missing? If `which` is missing, what are the
> > chances that other assumed unix tools are missing? (ie everything
> > breaks)
> 
> I don't know, but SUBMITTING_SCRIPTS says:
> 
>   5.  If you search for a command in $PATH, do NOT
>       use the "which" command or the "type -p" command. Both commands
>       are not supported on all platforms, thus causing problems for
>       some people. As an alternative, please use code similar to the
>       following shell script snippet which will perform the same
>       function. In this case, the path of the grass60 command is saved
>       if grass60 is found in $PATH. This won't recognize aliased
>       command name.
>   
>   	# Search for grass5 command in user's path
>   	for i in `echo $PATH | sed 's/^:/.:/
>       	    	    		    s/::/:.:/g
>   				    s/:$/:./
>   				    s/:/ /g'`
>   	do
>   	    if [ -f $i/grass5 ] ; then
>       		
>   		# Save the path of the grass60 command
>   		GRASS_PATH=$i/grass60
>   		# Use the first one in user's path
>   		break
>   	    fi
>   	done

Yes, I was aware of that, but was ignoring it as it has been many years
since anyone reported an error with it and I never heard an explicit
example of a platform where it wasn't present.

fyi, I am responsible for adding this:
   
>   <?>
>       If you must use "which", use as follows:
>   
>   	# check if we have awk
>   	if [ ! -x "`which awk`" ] ; then
>   	    echo "ERROR: awk required, please install awk or gawk first"
>   	    1>&2 exit 1
>   	fi
>   </?>



> > > If it is used, stderr should be redirected to /dev/null, to
> > > silence the errors about x-terminal-emulator not being found.
> > 
> > On what platforms does `which` not return silence if the target
> > isn't found?
> 
> The GNU version isn't silent:
> 
> 	glynn at cerise:6.1 $ which foo
> 	which: no foo in
> 	(/opt/grass-6.3.cvs/bin:/opt/grass-6.3.cvs/scripts:<snip>)


ok, so how about this:

>       If you must use "which", use as follows:
>   
>   	# check if we have awk
>   	if [ ! -x "`which awk 2> /dev/null`" ] ; then
>   	    echo "ERROR: awk required, please install awk or gawk first"
>   	    1>&2 exit 1
>   	fi


I found these messages in the archives:
 http://grass.itc.it/pipermail/grass-dev/2001-April/009332.html
   (supposedly missing on Cray & Solaris*)

 http://grass.itc.it/pipermail/grass-dev/2001-April/009280.html
 http://grass.itc.it/pipermail/grass-dev/2001-April/009350.html


[*] `which` was apparently missing on Cray & Solaris, but I think that
the test used in that first email is incorrect. In fact on my linux:

$ alias which
bash: alias: which: not found

$ type -p which
/usr/bin/which

so which is there, just not an alias. I'm still not convinced the
problem actually exists.


If we do need to use the `echo $PATH | sed..` method, I'd suggest
writing it as a small script (returning 0 or 1) and moving it to
$GISBASE/etc/ rather than cutting and pasting that ugly mess into
all the scripts that need it.


??,
Hamish




More information about the grass-dev mailing list