X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Message-ID: <4D3CF157.9050705@cpan.org> Date: Sun, 23 Jan 2011 22:26:15 -0500 From: Rafael Kitover Reply-To: rkitover AT cpan DOT org User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: windows paths in shebang lines References: <4D3CA1DA DOT 1000302 AT cpan DOT org> <4D3CB2ED DOT 5000801 AT bopp DOT net> In-Reply-To: <4D3CB2ED.5000801@bopp.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com 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 AT eeebox ~ >> $ head -1 /cygdrive/c/Perl64/site/bin/ack >> #!C:\Perl64\bin\perl >> >> rkitover AT 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 AT 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