delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
X-SWARE-Spam-Status: | No, hits=-1.6 required=5.0 tests=AWL,BAYES_00 |
X-Spam-Check-By: | sourceware.org |
Message-ID: | <4D3CB2ED.5000801@bopp.net> |
Date: | Sun, 23 Jan 2011 16:59:57 -0600 |
From: | Jeremy Bopp <jeremy AT bopp DOT net> |
User-Agent: | Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101208 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> |
In-Reply-To: | <4D3CA1DA.1000302@cpan.org> |
X-IsSubscribed: | yes |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.com> |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
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 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 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 -- 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
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |