On 1/23/2011 5:59 PM, Jeremy Bopp wrote:
On 01/23/2011 03:47 PM, Rafael Kitover wrote:
When a script's shebang line has a windows path, rather than a cygwin
path, it does not work:
rkitover@eeebox ~
$ head -1 /cygdrive/c/Perl64/site/bin/ack
#!C:\Perl64\bin\perl
rkitover@eeebox ~
$ /cygdrive/c/Perl64/site/bin/ack --version
Can't open perl script "/cygdrive/c/Perl64/site/bin/ack": No such file
or directory
On msys (msysGit) this works correctly:
rkitover@EEEBOX ~
$ /c/Perl64/site/bin/ack --version
ack 1.94
Running under Perl 5.12.2 at C:\Perl64\bin\perl.exe
Copyright 2005-2010 Andy Lester.
This program is free software. You may modify or distribute it
under the terms of the Artistic License v2.0.
Any chance this could be fixed? This would be a very nice feature for
users of Strawberry Perl and similar.
The problem is not that you're using a Windows path instead of a Cygwin
path in the shebang line; although, that is not officially supported
under Cygwin. Rather, the problem is that the version of Perl being run
as a result of that shebang line does not understand Cygwin paths.
That's why you see this error:
Can't open perl script "/cygdrive/c/Perl64/site/bin/ack": No such file
or directory
That's the Perl interpreter telling you that it doesn't understand the
path that was given to it for the ack script, so Perl is running at this
point which means that the shebang line is understood correctly. You
should probably go read about how shebang lines work in general, but the
short and sweet is that the shebang line is the first part of a command
line to be run where the last part is the command line used to run the
file that contains the shebang line itself. IOW, the command line used
in your first example is ultimately:
C:\Perl64\bin\perl /cygdrive/c/Perl64/site/bin/ack --version
Ahh yes, I wasn't thinking about this clearly, thank you for the
explanation :)
You have 3 potential solutions to your problem:
1) Run Perl explicitly with the Windows path to the script as an argument:
/cygdrive/c/Perl64/bin/perl C:/Perl64/site/bin/ack
2) Change into the C: drive and use a relative path to the ack script
when you run it:
cd /cygdrive/c
Perl64/site/bin/ack
3) Change your cygdrive mount location to / so that the path to the ack
script will be /c/Perl64/site/bin/ack under Cygwin.
Option 3 is the real hack. I think it should work because it appears in
your successful example that the Perl you want to use is able to
translate paths such as /c/path/to/something to C:/path/to/something
internally. By adjusting the cygdrive mount location to /, you will
cause Cygwin to send a compatible path to Perl when you run the script
as /c/Perl64/site/bin/ack.
-Jeremy
Unfortunately, that's not enough to get it to work:
$ /c/Perl64/site/bin/ack --version
Can't open perl script "/c/Perl64/site/bin/ack": No such file or directory
$ /c/Perl64/bin/perl /c/Perl64/site/bin/ack --version
Can't open perl script "/c/Perl64/site/bin/ack": No such file or directory
$ /c/Perl64/bin/perl /Perl64/site/bin/ack --version
ack 1.94
Running under Perl 5.12.2 at C:\Perl64\bin\perl.exe
...
msys seems to do something special for this to work correctly, it also
seems to translate its paths to windows paths when running windows
executables automatically, a very nice feature.
For this to work in cygwin I'd have to do something like mount c: as /,
which I'm guessing would break absolutely everything :)
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple