As other people already said, this way of doing things is not the most &quot;safe and beautiful&quot; way of getting what you need done.<div>If &quot;long-code&quot; is really long and important, I suggest investigating other solutions.</div>

<div><br><div><br></div><div>As Eli pointed out there are many weird conventions to pay attention depending on your shell.</div><div>When you pass the string with quotes as in your example, I get an error like this: /bin/sh: Syntax error: EOF in backquote substitution</div>

<div>Because bash is waiting for a second `.</div><div><br></div><div>Using a string would also make it difficult to write strings, because you&#39;d need to escape the double-quotes &quot;\&quot;this is a string\&quot;&quot; (and they will most likely conflict with your shell).</div>

<div><br></div><div>The code below will show how the external code will be called and the stdout/stderr (so you can see what&#39;s going wrong).</div><div><br></div><div>Using a quoted form instead of a string hides the problem of having ` and &#39; and instead use quasiquote and quote.</div>

<div><br></div><div>[]&#39;s</div><div><br></div><div>Rodolfo Carvalho</div><div><br></div><div><br></div><div><br></div><div><div>#lang racket</div><div>(define external-code (format  &quot;/opt/racket/bin/racket -e \&quot; ~a \&quot;&quot;</div>

<div>                               &#39;(begin</div><div>                                  (require mzlib/defmacro)</div><div>                                  (define-macro (my-when</div><div>                                                 test . body)</div>

<div>                                    `(if ,test (begin ,@body) &#39;()))</div><div>                                  (my-when #t &#39;(5 6 7)))))</div><div><br></div><div><br></div><div>(displayln external-code)</div>

<div>(newline)</div><div><br></div><div>(display</div><div> (string-join</div><div>  (let* ([p (process external-code)]</div><div>         [stdout (first p)]</div><div>         [stderr (fourth p)])</div><div>    (map port-&gt;string (list stdout stderr)))</div>

<div>  &quot;&quot;))</div></div><div><br></div><div><br><br><div class="gmail_quote">On Tue, Sep 13, 2011 at 08:22, Niitsuma Hirotaka <span dir="ltr">&lt;<a href="mailto:hirotaka.niitsuma@gmail.com">hirotaka.niitsuma@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">&gt; You could try something like this:<br>
&gt; #lang racket<br>
&gt; (require racket/system)<br>
&gt; (display (port-&gt;string (car (process (format &quot;racket -e &#39;~a&#39; &quot; &#39;(+ 2 3))))))<br>
<br>
</div>That does not work in the following case<br>
<br>
 (display (port-&gt;string (car (process    (format  &quot;racket -e \&quot; ~a \&quot; &quot;<br>
                                                &quot;<br>
                                                (require mzlib/defmacro)<br>
                                                (define-macro (my-when<br>
test . body)`(if ,test (begin ,@body) &#39;() ))<br>
                                 (my-when #t &#39;(5 6 7))<br>
                                                &quot;<br>
                                                )))))<br>
<div><div></div><div class="h5">_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
</div></div></blockquote></div><br></div></div>