Possible bug in exec with symlink.

Christopher Faylor cgf@redhat.com
Tue Dec 5 16:37:00 GMT 2000


On Tue, Dec 05, 2000 at 04:03:44PM -0800, Mo DeJong wrote:
>Hi all.
>
>I think I have run into a bug in the way Cygwin
>deals with symlinks in an exec. I am using the
>most recent net release on an NT box.
>
>First, the simple case that works correctly.
>
>$ cat one.sh
>#!/bin/sh
>echo one.sh running
>sleep 5
>exit 0
>
>$ ./one.sh
>one.sh running
>
>$ ln -s one.sh two.sh
>
>$ ./two.sh
>one.sh running
>
># An now the bit that does not work.
>
>This script uses the #! like so:
>
>$ head fake_toolchain
>#! /home/mdejong/install/SN452/bin/itcl_sh
>
># This is a faked up compiler that can
># be used to test the GUI toolchain
>
>Note that it runs just fine from the
>cmd line.
>
>$ ./fake_toolchain
>fake_toolcahin script
>
>
>But, a symlink to it does not work.
>
>$ ln -s fake_toolchain mygcc
>
>$ ./mygcc
>invalid command name "!<symlink>fake_toolchain "
>    while executing
>"!<symlink>fake_toolchain "
>    (file "./mygcc" line 1)
>
>It looks like Cygwin is getting confused about which
>file it should pass to the program. It is looking for
>the #! in the symlink but when it gets run, it passes
>the name of the symlink on the cmd line.
>
> ./itcl_sh.exe mygcc
>nvalid command name "!<symlink>fake_toolchain "
>   while executing
>!<symlink>fake_toolchain "
>   (file "mygcc" line 1)

Cygwin sets the argv[0] to be the name of the file which
invoked the script.

In this case, that's 'mygcc'.  'mygcc' is a symbolic link to a script
which is running a non-cygwin program.  The program is apparently
looking at argv[0] for some kind of inspiration but is unable to
decipher cygwin's symlink.

On linux, if you create a file called tst:

#!/bin/sh
echo $0 - $*

then you do:

% chmod a+x tst
% ln -s tst foob
% ./foob bob
foob - bob

So, I think that Cygwin is behaving appropriately.

cgf

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com



More information about the Cygwin mailing list