JoeSmith <Jo******@IDontWantSpam.bogus.bogusaddress.com> writes:
You could probably write a replacement for env that uses cygpath -m on
the script file. So, your env could call original env then do cygpath
-m on the second paramter. The one thing to think about is what the
shell might do to other file/directory paramters passed to your
script. So, does it convert
foo.py .
into:
python /cygdrive/h/bin/foo.py python /cygdrive/h/bin/
Then your python script might not work. So, do you run cygpath on all paramters?
(...)
The other option would be to write a special alias/script just for
foo.py to handle on the oddities. This is what I did to get it to
execute gvim for win32. I wrote a shell function to go through all
paramters and run cygpath -m
on everything that does not begin with a '-'.
That sounds very similar to how I have my system setup. I've got bash
functions defined to translate just the first (non-option) argument to
Windows form for use from my bash prompt. I haven't really found it
necessary to process all subsequent arguments (on the rare occasion I
need it I just use `cygpath` myself), and as you point out it might
adversely affect how the commands perceive the input.
I tend to run everything explicitly with "py##" aliases (or python)
from the command line because I bounce between python versions a lot,
so I don't depend on the Windows .py mapping, but presumably a similar
approach could work by an alias for "env".
So for example, my Python relevant section from my .bashrc:
- - - - - - - - - - - - - - - - - - - - - - - - -
#
# Function to pre-process first argument (skipping past options) of a command
# with cygpath to translate paths to for Windows tools.
#
function wpath {
typeset -i cmdstart=1
local cmd=""
local args=""
while arg=${*:$cmdstart:1} && [ "${arg:0:1}" == "-" ]; do
cmdstart=cmdstart+1
done
if [ $# -ge $cmdstart ]; then
cmd=`cygpath -w ${*:$cmdstart:1}`
args=${*:$((cmdstart+1))}
fi
echo ${*:1:$((cmdstart-1))} $cmd $args
}
#
# Function used to execute a command with its first argument translated to
# windows compatible paths.
#
function wcmd {
$1 `wpath ${*:2}`
}
#
# Functions to run explicit Python versions as well as to establish a
# new default path. Automatically use wpath when executing for path names.
#
function py15path
{
export PATH=/c/python/1.5:/c/python/1.5/DLLs:$ORIGPATH
}
function py15
{
PATH=/c/python/1.5:/c/python/1.5/DLLs:$ORIGPATH wcmd python $*
}
function py20path
{
export PATH=/c/python/2.0:/c/python/2.0/DLLs:$ORIGPATH
}
function py20
{
PATH=/c/python/2.0:/c/python/2.0/DLLs:$ORIGPATH wcmd python $*
}
function py21path
{
export PATH=/c/python/2.1:/c/python/2.1/DLLs:$ORIGPATH
}
function py21
{
PATH=/c/python/2.1:/c/python/2.1/DLLs:$ORIGPATH wcmd python $*
}
function py22path
{
export PATH=/c/python/2.2:/c/python/2.2/DLLs:$ORIGPATH
}
function py22
{
PATH=/c/python/2.2:/c/python/2.2/DLLs:$ORIGPATH wcmd python $*
}
function py23path
{
export PATH=/c/python/2.3:/c/python/2.3/DLLs:$ORIGPATH
}
function py23
{
PATH=/c/python/2.3:/c/python/2.3/DLLs:$ORIGPATH wcmd python $*
}
# And establish 'python' to filter through wcmd
alias python='wcmd python'
- - - - - - - - - - - - - - - - - - - - - - - - -
-- David