How to strictly differentiate <file>.exe with <file> ???

Chris J. Breisch chris.ml@breisch.org
Wed Jun 18 18:04:00 GMT 2014


Emmanuel Lepavec wrote:
> Hello,
>
> 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
> 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'?
>
> Thank you.
>

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
#!/bin/bash
file1=$1
file2=$1.exe
inode1=$(ls -i $file1 | sed -e 's/ .*//')
inode2=$(ls -i $file2 | sed -e 's/ .*//')
if [ $inode1 -eq $inode2 ]; then
    echo $file1 is actually $file2
else
    echo $file1 and $file2 are separate files
fi
EOF

$ chmod +x areFilesSame.sh

$ ./areFilesSame.sh bar
bar is actually bar.exe


-- 
Chris J. Breisch

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



More information about the Cygwin mailing list