Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <8CC35F99-22CF-42A8-B326-987171DEDF06@adelielinux.org>
Date: Thu, 2 Mar 2023 11:52:15 -0600
From: "A. Wilcox" <awilfox@...lielinux.org>
To: musl@...ts.openwall.com
Subject: Re: Off topic question about shebang and exec()

On Mar 2, 2023, at 10:32 AM, Markus Wichmann <nullplan@....net> wrote:
> 
> On Thu, Mar 02, 2023 at 04:15:38PM +0200, Paul Schutte wrote:
>> Hi all
>> 
>> I apologize for abusing the knowledge of the people on this list, but I
>> know they will know the answer. Google does not provide a usable answer.
>> 
>> I am busy writing a toy language and I would like it to be used as both a
>> compiler and "interpreter"
>> 
>> I would like it to compile the source and then run the resulting binary
>> when the source file is called via the shebang and it should just do a
>> normal compile when called with "compile code.src"
>> 
>> argv[0] contains the path to the compiler in both cases, which makes sense.
>> 
>> Is there any way to determine which method was used to call the compiler?
>> 
>> Kind Regards
>> Paul
> 
> Not to my knowledge. I would also consider it poor design to use a trick
> like that. The normal assumption is that a shebang and just running the
> command from command line are equivalent.
> 
> Normal solution here is to have a command line switch to select one
> behavior or the other. That switch can be added to the shebang or the
> command line, whatever you choose.
> 
> Ciao,
> Markus

An even better solution is hinted in OP's problem description: argv[0].

Have two entry points, like a multi call binary, based on that.

You could use a softlink or hardlink named `lang` to `langc`.

Best,
-A.

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.