Re: Noweb Function's body without evaluation

2023-04-04 Thread Ihor Radchenko
suarezmigu...@icloud.com writes:

> #+name: getClientInstanceNameNew
> #+begin_src shell :session something :var connection="admin@10.0.3.149" :var 
> client="example_client" :var apacheDir="/etc/apache/vhosts"
> <>
> client=$client
> apacheDir=$apacheDir
> grep $client $apacheDir/*
> #+end_src
>
> So, the initSSH call works successfully, so that concludes my first question, 
> being that I can now affect the $connection variable. Thank you again!
>
> However, since the SSH call changes the environment, the $client and 
> $apacheDir variables are not defined in the new environment. I did try 
> setting it again like above, but this doesn’t help as the variables do not 
> exist.

Org babel knows not if the environment changes along the way.
Of course, you can break the variable in bash by calling "bash" as one of
the commands in src block. Or you can do more crazy staff and call
"python" (or, say, "ghci") interpreter. There is no sane way to handle
such weird scenarios programmatically.

I suggest you to write some kind of wrapper like

#+name: obl-identity
#+begin_src emacs-lisp :var x=""
x
#+end_src

#+begin_src bash :noweb yes
<>
client=<>
#+end_src

This will not rely on language-specific way to define variables and
instead generate the code you want to execute fully, on Elisp side.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 



Re: Noweb Function's body without evaluation

2023-04-03 Thread suarezmiguelc
Wow, works!, thank you very much.

Now, I have a more specific example.

#+name: initSSH
#+begin_src shell :var connection=“admin@10.0.3.200" :noweb yes
ssh -t miguel@172.28.3.249 "sudo -u admin ssh -t $connection 'sudo su'"
#+end_src

#+name: getClientInstanceNameNew
#+begin_src shell :session something :var connection="admin@10.0.3.149" :var 
client="example_client" :var apacheDir="/etc/apache/vhosts"
<>
client=$client
apacheDir=$apacheDir
grep $client $apacheDir/*
#+end_src

So, the initSSH call works successfully, so that concludes my first question, 
being that I can now affect the $connection variable. Thank you again!

However, since the SSH call changes the environment, the $client and $apacheDir 
variables are not defined in the new environment. I did try setting it again 
like above, but this doesn’t help as the variables do not exist.

 99% of the commands I run are remote so, I will keep investigating this. It 
would make more sense to use :dir and tramp, but as the connections are slow, I 
can only connect with this call which works pretty fast.

> 2/4/23 12:06、Ihor Radchenko のメール:
> 
> suarezmigu...@icloud.com writes:
> 
>> 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
>> 
> p ...>
>> #+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
>> <>
>> <>
>> #+end_src
> 
> You can just
> 
> #+begin_src shell :var connection "admin@anotherhost"
> <>
> >
> #+end_src
> 
> -- 
> Ihor Radchenko // yantar92,
> Org mode contributor,
> Learn more about Org mode at .
> Support Org development at ,
> or support my work at 




Re: Noweb Function's body without evaluation

2023-04-02 Thread Ihor Radchenko
suarezmigu...@icloud.com writes:

> 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
>
p ...>
> #+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
> <>
> <>
> #+end_src

You can just

#+begin_src shell :var connection "admin@anotherhost"
<>
>
#+end_src

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 



Re: Noweb Function's body without evaluation

2023-03-16 Thread suarezmiguelc
Hello Ken, thank you for your message,

After reading the very interesting get_property function, I found that even 
though I will probably use it for some cases, it doesn’t apply directly, to my 
case.

For more examples, if I have 1 source code block:

>> #+name: greeting
>> #+begin_src sh :var name="world" :results output :session testing
>> 
>> echo "hello, $name\!"
>> #+end_src


I have three options in noweb to use this:
- Use its body into another begin_src source code block with <>
- Use its result “hello, world!” Into another code block, which results in 
babel trying to execute the hello, command, which doesn’t exist, this with 
<>
- Use its result, the same as above, but with another parameter, results in the 
same but the variable name is different, so <>

I’m trying to do the first, but with another parameter, so Use its body into 
another begin_src source code block with, get the resulting body after changing 
the variable without it being evaluated, so that I get a valid command to get 
to bash, like with <>, but I can specify a different name variable.

I found the [:body] param but, even though it lets me change the variable as I 
want, it then tries to evaluate it, so I get a different value but the same 
hello, command doesn’t exist. Even though what I would want is to get echo 
“hello, $name\!” but, $name is different.

Thank you for your response Ken, I hope I gave a clearer example with the above.


> 16/3/23 5:16、Ken Mankoff のメール:
> 
> Hi,
> 
> I'm not sure that I understand your issue or needs from the provided 
> examples, but I wonder if the example I provide here would be helpful. It 
> bypasses :var an lets you inject a PROPERTY value anywhere. It is also 
> language agnostic. You can use it to execute commands (that are set as 
> PROPERTY values) or set variables to values.
> 
> https://lists.gnu.org/archive/html/emacs-orgmode/2023-03/msg00251.html
> 
>  -k.
> 
> On 2023-03-15 at 18:54 -04, suarezmigu...@icloud.com wrote...
>> 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
>> <>
>> <>
>> #+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
>> <>
>> #+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 <>
>> - Execute a function and return its results with <>
>> - Execute a function and return its results even with different params with 
>> <>
>> 
>> So right now, the one that’s missing is, call a function’s body with 
>> different parameters. So the
>> function <> is not evaluated.
>> 
>> After searching a lot, I came across:
>> 
>> #+begin_src shell :session testing
>> <>
>> #+end_src
>> 
>> Which results in:
>> 
>> sh-3.2$ PS1="org_babel_sh_prompt> "
>> org_babel_sh_prompt> name='Testin'
>> org_babel_sh_prompt> echo "hello, $name\!"
>> hello, Testin\!
>> org_babel_sh_prompt> echo 'org_babel_sh_eoe'
>> org_babel_sh_eoe
>> org_babel_sh_prompt> hello, Testin\!
>> 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 

Re: Noweb Function's body without evaluation

2023-03-15 Thread Ken Mankoff
Hi,

I'm not sure that I understand your issue or needs from the provided examples, 
but I wonder if the example I provide here would be helpful. It bypasses :var 
an lets you inject a PROPERTY value anywhere. It is also language agnostic. You 
can use it to execute commands (that are set as PROPERTY values) or set 
variables to values.

https://lists.gnu.org/archive/html/emacs-orgmode/2023-03/msg00251.html

  -k.

On 2023-03-15 at 18:54 -04, suarezmigu...@icloud.com wrote...
> 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
> <>
> <>
> #+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
> <>
> #+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 <>
> - Execute a function and return its results with <>
> - Execute a function and return its results even with different params with 
> <>
>
> So right now, the one that’s missing is, call a function’s body with 
> different parameters. So the
> function <> is not evaluated.
>
> After searching a lot, I came across:
>
> #+begin_src shell :session testing
> <>
> #+end_src
>
> Which results in:
>
> sh-3.2$ PS1="org_babel_sh_prompt> "
> org_babel_sh_prompt> name='Testin'
> org_babel_sh_prompt> echo "hello, $name\!"
> hello, Testin\!
> org_babel_sh_prompt> echo 'org_babel_sh_eoe'
> org_babel_sh_eoe
> org_babel_sh_prompt> hello, Testin\!
> 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!




Noweb Function's body without evaluation

2023-03-15 Thread suarezmiguelc


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
<>
<>
#+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
<>
#+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 <>
- Execute a function and return its results with <>
- Execute a function and return its results even with different params with 
<>

So right now, the one that’s missing is, call a function’s body with different 
parameters. So the function <> is not evaluated.

After searching a lot, I came across:

#+begin_src shell :session testing
<>
#+end_src

Which results in:

sh-3.2$ PS1="org_babel_sh_prompt> "
org_babel_sh_prompt> name='Testin'
org_babel_sh_prompt> echo "hello, $name\!"
hello, Testin\!
org_babel_sh_prompt> echo 'org_babel_sh_eoe'
org_babel_sh_eoe
org_babel_sh_prompt> hello, Testin\!
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!