delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2012/04/26/10:14:31

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,T_RP_MATCHES_RCVD
X-Spam-Check-By: sourceware.org
To: cygwin AT cygwin DOT com
From: Andrew DeFaria <Andrew AT DeFaria DOT com>
Subject: Odd behavior of scripts in dos mode
Date: Thu, 26 Apr 2012 07:13:43 -0700
Lines: 36
Message-ID: <jnbl6p$qav$1@dough.gmane.org>
Mime-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120309 Thunderbird/11.0
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

I remember that Cygwin used to not be able to run scripts that were 
converted or were in "DOS" mode - had trailing carriage returns in the 
file. It would fail because the #! line might have /bin/bash\r which was 
not a file (bash with a carriage return that is). But the behavior has 
changed. Now it seems to ignore the trailing carriage return and it 
execs bash itself. But it fails later on with other carriage returns.

For example, consider the following:

#!/bin/bash
if [ 1 = 1 ]; then
   echo "test"
fi

Then use unix2dos to make the file have trailing carriage returns and 
execute the script:

Neptune:test.sh
./test.sh: line 2: $'\r': command not found
./test.sh: line 6: syntax error: unexpected end of file

Cygwin used to say something like "Unable to exec /bin/bash" but now it 
execs /bin/bash and bash fails to execute the if statement. So it seems 
to me that Cygwin is trying to be nice and solve the problem of people 
who get their scripts edited in some tools that writes out DOS mode 
files. My question is if it strips the trailing carriage return from the 
#! line why doesn't it do it for all lines?

(And yes I know I can dos2unix the script and it will work - the problem 
is it coming from some SCM system checkout (perforce) and that tool is 
adding trailing carriage returns to the file when it checks it out).
-- 
Andrew DeFaria <http://defaria.com>
Why is it that the guy who comes up behind you while you're waiting for 
an elevator presses the already lit button as though he has some magical 
powers that you don't?


--
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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019