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

AltStyle によって変換されたページ (->オリジナル) /