* lisp/ob-shell.el: Remove defcustom `org-babel-sh-command' and
replace with `shell-file-name' throughout.
(org-babel-variable-assignments:sh): Make check for bash work in more
cases.
The original code and the patched version rely on the shell being
available via PATH. Instead the shell name should be mapped to the
appropriate executable via an alist and invoked via an absolute
filename. For security reasons the permissible shells should probably
be taken from /etc/shells or equivalent by default. Instead of
checking for bash, the same or another alist could provide the
information of whether or not the shell supports arrays (which indeed
were introduced by ksh originally).
* lisp/ob-shell.el: Remove unused defcustom
`org-babel-sh-var-quote-fmt'.
(org-babel-variable-assignments:bash_array):
(org-babel-variable-assignments:bash_assoc): Remove superfluous
`mapcar' and double quotes around parameters.
(org-babel-sh-var-to-sh): Single-quote the whole string and escape
all single quotes in the original string.
* lisp/ob-shell.el: added support to serialize vars as arrays or associative arrays as appropriate if it is using bash.
* testing/examples/ob-shell-test.org: a file containing a few code blocks both illustrating the use of arrays as well as serving as test for the new export functionality.
* testing/lisp/test-ob-shell.el: added a few unit tests that verify that this new logic only triggers for bash and no other shell at this time.
When variables are defined in a 'sh' code block, they are exported as strings. when the variable itself is an array or a table, then we simply get a shell variable that contains the list of all values in a non-structured form.
When calling the code block with bash, however, it will now export the list as an array, the table as an associative array. A scalar is exported the same way as before.
Signed-off-by: Pascal Fleury <fleury@google.com>
* lisp/ob-sh.el (org-babel-variable-assignments:sh): Check for
":hlines yes" and use header arg :hlines-string if
defined (default to "hline") and add this to the call of
`org-babel-sh-var-to-sh'.
(org-babel-sh-var-to-sh, org-babel-sh-var-to-string): Add additional
optional string argument `hline' and use it for the :hline parameter
in the call to `orgtbl-to-generic'.
* lisp/ob-shell.el (org-babel-execute:shell): Pass the cmdline header
argument to `org-babel-sh-evaluate'.
(org-babel-sh-evaluate): Pass the cmdline header argument to
`call-process-shell-command'.