This is the mail archive of the
mailing list for the Cygwin project.
Re: How to strictly differentiate <file>.exe with <file> ???
- From: "Chris J. Breisch" <chris dot ml at breisch dot org>
- To: "cygwin at cygwin dot com" <cygwin at cygwin dot com>
- Date: Wed, 18 Jun 2014 14:04:28 -0400
- Subject: Re: How to strictly differentiate <file>.exe with <file> ???
- Authentication-results: sourceware.org; auth=none
- References: <1403111974 dot 43795 dot YahooMailNeo at web172703 dot mail dot ir2 dot yahoo dot com>
Emmanuel Lepavec wrote:
I have an issue with the latest version of Cygwin (previously I was using an old one 1.5.25, I think...).
When using basic commands such as 'ls', 'rm', now the shell resolve incorrectly filenames without extension.
If a same file with '.exe' extension exists, it will be used.
For example, take a directory with a single file 'a.exe'.
$ ls -a
. .. bar.exe
$ ls bar
$ rm bar
rm: remove regular empty file `bar'?
The command should have returned 'rm: cannot remove `bar': No such file or directory'
If I want to delete only 'bar' (without extension), it will actually delete 'bar.exe' file. This is an unexpected behavior which pose an big issue in some of my build scripts.
Is there some way to strictly differentiate 'bar' from 'bar.exe'?
I'm no expert, but...
If you actually have both a 'bar' and a 'bar.exe', then 'rm bar' will
remove 'bar' and not 'bar.exe'. So, it seems to me that the problem is
detecting when 'bar' is really 'bar.exe'.
On my machine, with a single file bar.exe, I can do this:
$ ls -i bar bar.exe
5348024558398844 bar 5348024558398844 bar.exe
Notice that they have the same pseudo-inode number. This would not be
the case if they were distinct files. It shouldn't be hard to work up a
little bash script that can let you know if bar is actually bar.exe.
Here's a sample I whipped up. This isn't bullet-proof and has some
redundancy, but it's just a sample.
$ cat > areFilesSame.sh << EOF
inode1=$(ls -i $file1 | sed -e 's/ .*//')
inode2=$(ls -i $file2 | sed -e 's/ .*//')
if [ $inode1 -eq $inode2 ]; then
echo $file1 is actually $file2
echo $file1 and $file2 are separate files
$ chmod +x areFilesSame.sh
$ ./areFilesSame.sh bar
bar is actually bar.exe
Chris J. Breisch
Problem reports: http://cygwin.com/problems.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple