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