Neil Best <nb...@ci.uchicago.edu> writes: > Can sh source block take arguments? I get nothing. > > #+NAME: test(foo="bar") > #+BEGIN_SRC sh :session :results output verbatim replace > echo "1. foo is $foo" > echo "2. foo is ${foo}" > #+END_SRC > > #+RESULTS: > : 1. foo is > : 2. foo is > > > . . . but this is fine: > > #+NAME: test2 > #+BEGIN_SRC sh :var foo="bar" :session :results output verbatim > replace > echo "1. foo is $foo" > echo "2. foo is ${foo}" > #+END_SRC > > #+RESULTS: > : 1. foo is bar > : 2. foo is bar > > When I tried this: > > #+CALL: test("baz") > > I get "reference 'test' not found in this buffer" -- what does this > mean? I got a similar message when I tried to define a simple call > using an R fragment that has a session associated with it. Evaluating > the code block with the default argument works fine, but a #+CALL: > construct fails. Maybe this is a separate issue. > > I trolled the web for relevant examples or reports but found none. My > setup is pretty much out-of-the-box. I am on Ubuntu Oneiric so sh is > a symlink to dash. I was not aware of dash until now so I don't know > what the implications of that are. > > This example may be overly trivial. My ultimate goal is to generate > shell scripts as function of the argument and tangle them out > something like this: > > #+BEGIN_SRC sh :tangle someArg.sh > <<script("someArg")>> > #+END_SRC > > So the results of the "function" will be lines of script code with > variables already interpolated using echo and a heredoc. Note that > test2 will not allow me to paramterize this, AFAIK. I'll have to > write each tangle block by hand but there's a small number of them. > If there is a more clever way I am certainly interested, but it seems > irrelevant until I understand what is happening above. Thanks. I am > very intrigued by LP possibilities using Org after messing with Sweave > for a year+, so please bear with me as I cut my teeth. >
Hi Neil, Are you using the latest version of Org-mode? I ask because all of your examples work as expected on my system, specifically I get the following... Best, #+NAME: test(foo="bar") #+BEGIN_SRC sh :session :results output verbatim replace echo "1. foo is $foo" echo "2. foo is ${foo}" #+END_SRC #+RESULTS: test : 1. foo is bar : 2. foo is bar . . . but this is fine: #+NAME: test2 #+BEGIN_SRC sh :var foo="bar" :session :results output verbatim replace echo "1. foo is $foo" echo "2. foo is ${foo}" #+END_SRC #+RESULTS: test2 : 1. foo is bar : 2. foo is bar #+RESULTS: : 1. foo is bar : 2. foo is bar When I tried this: #+CALL: test("baz") #+RESULTS: test("baz") : 1. foo is baz : 2. foo is baz -- Eric Schulte http://cs.unm.edu/~eschulte/