Subject: Bug: #!/usr/bin/env gives poor error message for DOS line-endings

From: Simon Richard Clarkstone <[email-masked]>
Date: Fri, 22 Jul 2016 21:39:58 +0100

I have found a poor error message in env (GNU coreutils) 8.23, on FC22.

---

I created the following executable file, with a DOS line-end:

#!/usr/bin/env sh

When run, it displays the following error message on my terminal:

: No such file or directory

This error message is cryptic.  However, if you process stderr through 
`cat -v` to display nonprintable characters, you find the error message 
has a CR in it:

/usr/bin/env: sh^M: No such file or directory

and the CR caused the second half of the error message to over-write the 
first half when displayed on-screen.

---

To diagnose the problem I had to use strace, so IMO this error message 
could be improved by expanding out control characters.  For example see 
how bash handles an analogous situation, with the script:

#!/usr/bin/sh

Which displays:

bash: ./tmp.sh: /usr/bin/sh^M: bad interpreter: No such file or directory

Here, bash has expanded out the ^M before displaying it, showing that 
something is stuck on the end of the #! line.

-- 
Simon Richard Clarkstone, CoreFiling Limited
Software Engineer, Data Modelling
http://www.corefiling.com/
Phone: +44-1865-203192