On 03/11/2022 01:17, Greg Minshall wrote:
hi.  i have a text in a named #+begin_example ... #+end_example block.
i would like to process this text line by line in a shell (bash, say)
code block.  but, it appears that the individual lines are not
separated, but passed as one long string to the source block.  (example
below.)

#+name: lbl
#+begin_example
line 1
line 2
#+end_example

You may use :stdin instead of :var, see https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-shell.html

#+begin_src bash :stdin lbl
  while read -r -a arr ; do
      printf 'value\t%s\n' "${arr[1]}"
  done
#+end_src

#+RESULTS:
| value | 1 |
| value | 2 |

#+begin_src bash :var input=lbl :var in2='("first" "second")
   echo ${#input[@]}
   echo ${#in2[@]}
   echo ${input}
#+end_src

There is a nice tool: shellcheck. It should not be difficult to define a function that feeds current source block to it. The only point is to specify shell type since shebang is missed. In some cases even bash -n before running a script may save some time during debugging.




Reply via email to