"Eric Schulte" <address@hidden> writes:
Hi Maurizio,
The ip addresses in your table are being interpreted as source/
reference
names which org-babel is trying to resolve. In order to
differentiate
between strings and reference names, we either must surround all
strings
in double quotes (as below) or we must end all references with "()"
and
disallow any strings which end in "()".
Hi Eric,
Thanks for the much better answer. I think my vote goes for your
second
option. In other words, :var x=blockname passes the string
"blockname",
whereas :var x=blockname() passes the result of evaluating a block
called "blockname".
One argument for this is that in order to pass arguments to a block
being evaluated as a reference, users are already obliged to use the
parenthetic function call syntax:
:var x=blockname(arg1=val1)
so demanding the parentheses in the absence of arguments is natural
(and
perhaps even serves to remind users of the possibility of passing
arguments).
Also I think that users will probably pass strings more often than
they
will pass the results of block reference evaluations, so
interpreting :var=blockname as a string literal may also be
justified by
Least Surprise for naive users (e.g. apparently me...).
Dan
Currently we are taking the
former approach, which means your table will require the following to
work...
#+TBLNAME: system-host-ping :var host=system-hosts
| name | ip | ping |
|--------+------------------+----------------|
| host 1 | "192.168.10.200" | 192.168.10.200 |
| host 2 | "192.168.10.24" | 192.168.10.24 |
| host 3 | "192.168.42.24" | 192.168.42.24 |
#+TBLFM: $3='(sbe system-ping (ip $2))'
#+source: system-ping
#+begin_src sh :var ip=0
# This is what I eventually want
#ping -w 10 -c 1 -q $ip >/dev/null 2>&1
#echo $?
# Testing
echo $ip
#+end_src
I'd be open to discussion on this issue. I suppose if reference
resolution fails we could try using the name as a string literal, but
that could lead to debugging nightmares...
Cheers -- Eric
Maurizio Vitale
<address@hidden> writes:
In the table/block pair below, I'm trying to pass an IP number to
some
shell code. It seems like in the table formula I can only have
numbers. Is that right?
#+TBLNAME: system-host-ping :var host=system-hosts
| name | ip | ping |
|-----------+----------------+--------|
| host 1 | 192.168.10.200 | #ERROR |
| host 2 | 192.168.10.24 | #ERROR |
| host 3 | 192.168.42.24 | #ERROR |
#+TBLFM: $3='(sbe system-ping (ip $2))'
#+source: system-ping
#+begin_src sh
# This is what I eventually want
#ping -w 10 -c 1 -q $ip >/dev/null 2>&1
#echo $?
# Testing
echo $ip
#+end_src
Any way to pass arbitrary strings?
Thanks a lot,
Maurizio
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode