D Shell [was Re: A C++ interpreter]

Graham Fawcett fawcett at uwindsor.ca
Fri Aug 17 05:56:20 PDT 2012


On Friday, 17 August 2012 at 12:53:50 UTC, Graham Fawcett wrote:
> On Tuesday, 14 August 2012 at 04:09:22 UTC, Nick Sabalausky 
> wrote:
>> On Mon, 13 Aug 2012 17:36:13 +0200
>> "jerro" <a at a.com> wrote:
>>
>>> > I probably should make it so it automatically wraps the 
>>> > code in a main function for even easier and more script 
>>> > like usage.
>>> 
>>> Rdmd already has this functionality with the --eval flag. You 
>>> are supposed to pass the code as a command line parameter, 
>>> but you can use it with files like this:
>>> 
>>> cat - test.d <<< "--eval=" | xargs -0 rdmd
>>> 
>>> I've only tried this on Linux.
>>
>> As a person who's still only half-way a Linux guy, I have to 
>> ask: What
>> the hell is going on in that command?
>>
>> I understand bits and pieces of it, but my mind's having a 
>> hard time
>> parsing it. Can any of you unix gurus help me out?
>
> Run the "cat" program, which prints two file contents: the 
> first file is stdin (denoted by "-"), which contains the text 
> "--eval=", via the <<< redirector. Cat then prints the contents 
> of test.d. All of this is piped in to "xargs", which calls dmd 
> along with the command line arguments consisting of the piped 
> input.
>
> It's overly complicated. Try this instead:
>
> rdmd --eval="$(cat test.d)"
>
> Best,
> Graham

I meant to add, the point of this appears to be that you can 
execute a "toplevel expression." So test.d should contain bare 
statements, e.g.

    import std.stdio; writeln("hi");

rather than

    void main() { import std.stdio; writeln("hi"); }





More information about the Digitalmars-d mailing list