Hello Org-mode community. I’m using Emacs Doom Framework, specifically:
Emacs 28.2 (build 1, aarch64-apple-darwin22.3.0, Carbon Version 169 AppKit 2299.4) of 2023-02-23. I use heavily org-mode for Literate DevOps, so I have a lot of shell commands that connect through SSH and do some things later, for example: #+name: initSSH #+begin_src shell :var connection=“admin@somehost" ssh -t miguel@host "sudo -u someuser ssh -t $connection 'sudo su'" #+end_src So then I can call: #+call: initSSH(connection=“admin@anotherhost”) With any other header parameters or session, the above works correctly. I cannot use tramp due to network latency issues, so this is the most performance way for me, since I also have to do some multi-hops which are indeed supported in tramp, but it is too slow for me, so I rather only commands. The thing is that, I then would like to call these not with a #+call function, but add them into a bigger script, let’s say that I define another command: #+name: getStorage #+begin_src shell df #+end_src Which has to be run in a remote server, could be any remote server as I have to connect to several. So I would like to be able to: #+begin_src shell <<initSSH(connection=“admin@anotherhost”)>> <<getStorage>> #+end_src The first doesn’t work as org-mode runs the code and passes the resulting string to bash, which isn’t a command. The latter works normally. So the issue here are the parameters. So I made another simple example for this: #+name: greeting #+begin_src sh :var name="world" :results output :session testing echo "hello, $name\!" #+end_src #+results: greeting #+begin_src sh hello, world\! #+end_src #+begin_src shell <<greeting(name="ss")>> #+end_src This results in sh: hello,: command not found, as it is executing the function. I see in the documentation that I can: - Call a function’s body with <<namedcodeblock>> - Execute a function and return its results with <<namedcodeblock()>> - Execute a function and return its results even with different params with <<namedcodeblock(param=“sds”)>> So right now, the one that’s missing is, call a function’s body with different parameters. So the function <<namedcodeblock>> is not evaluated. After searching a lot, I came across: #+begin_src shell :session testing <<greeting[:body](name="Testingggg")>> #+end_src Which results in: sh-3.2$ PS1="org_babel_sh_prompt> " org_babel_sh_prompt> name='Testingggg' org_babel_sh_prompt> echo "hello, $name\!" hello, Testingggg\! org_babel_sh_prompt> echo 'org_babel_sh_eoe' org_babel_sh_eoe org_babel_sh_prompt> hello, Testingggg\! sh: hello,: command not found org_babel_sh_prompt> echo 'org_babel_sh_eoe' org_babel_sh_eoe org_babel_sh_prompt> Which is somewhat what I need since at least the variable is changed, but the result of this execution is also passed to shell so, same error. I can’t find much documentation about this, what is the correct syntax here?, Thank you!