Remove Cygwin Path for Called Batch Script

Scott Wegner swegner@hdfgroup.org
Mon Mar 31 16:20:00 GMT 2008


Kurt Franke wrote:
> Scott Wegner <swegner <at> hdfgroup.org> writes:
> 
>> Greg Chicares wrote:
>>> On 2008-03-25 13:30Z, Scott Wegner wrote:
>>>> I am trying to create a "wrapper" Cygwin bash script to add 
>>>> functionality to an existing Windows batch script.  In my Cygwin script, 
>>>> I would like to call the batch file with something like:
>>>>
>>>> ...
>>>> cmd.exe /k batch-script.bat params
>>>> ...
>>>>
>>>> Calling the script in this fashion seems to generally work (in that the 
>>>> script executes).  However, I have trouble because the Cygwin path is 
>>>> prepended to the Windows path in the batch script.  As a result, trying 
>>>> to use the Windows "find" use Cygwin's instead.
>>> If you write
>>>   %SystemRoot%\system32\find
>>> in the batch file, then you'll get the msw "find" whether or not
>>> any Cygwin directory is on your path.
>> Hi Greg,
>>
>> Thanks for the quick reply.  This is a feasible solution.  However, I'd 
>> rather find a solution where the batch script can remain "unaware" of 
>> its Cygwin context.  Once I get things working, I plan on creating bash 
>> script wrappers for many Windows batch scripts, so I'd like to make the 
>> changes in the Cygwin environment, rather than editing each batch script 
>> individually.
>>
>> I'll keep looking at let you know if I find anything.
>>
>> Scott
>>
>>
> 
> Hi Scott,
> 
> you may just remove all path components from PATH which are part of cygwin.
> 
> I use the following bash function to do those removing since long years ago:
> 
> rmpc()
> {
>   local C=$2
>   local R=""
>   local OIFS="$IFS"
>   IFS="$IFS:"
>   set -- $1
>   IFS="$OIFS"
>   for i in "$@"
>   do
>     if [ "x$i" != "x$C" ]
>     then
>       if [ "x$R" != "x" ]
>       then
>         R="$R:$i"
>       else
>         R="$i"
>       fi
>     fi
>   done
>   echo $R
> }
> 
> to work correctly make sure your wrapper script starts with bash in magic line -
> #! /bin/bash
> for example but not
> #! /bin/sh 
> because when invoked as bourne shell necessary functionality may be missed
> 
> you may add this function directly after the magic line for invocation
> 
> 
> then just before calling your dos batch scripts remove the unwanted
> path components from PATH
> 
> you shouldn't do this earlier in your code because no cygwin applications
> and scripts are found after this unless they are hashed by bash in a
> pervious call
> 
> 
> PATH=`rmpc $PATH /bin`
> PATH=`rmpc $PATH /usr/bin`
> 
> you may remove any path component this way
> 
> PATH=`rmpc $PATH .`     # remove .
> PATH=`rmpc $PATH ""`    # remove blank path components
> 
> 
> caution: this mechanism remove all multiple occurences of a componente
> from PATH
> 
> 
> when returned from your dos batch script you are lacking the most cygwin
> functionality.
> to get it again you have to save the PATH previous to the changes:
> 
> SAVE_PATH=$PATH
> 
> and just restore it after the dos script returned:
> 
> PATH=$SAVE_PATH
> 

Hi Kurt,

Thanks for the reply (as well as others who have contributed).  This 
looks like it will fit my needs perfectly.  I'll give it a try and post 
back if I have any more trouble.

Thanks!
Scott

> 
> 
> regards
> 
> kf
> 
> 
> 
> 
> 
> --
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> Problem reports:       http://cygwin.com/problems.html
> Documentation:         http://cygwin.com/docs.html
> FAQ:                   http://cygwin.com/faq/
> 
> 
> 

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list