From mboxrd@z Thu Jan 1 00:00:00 1970 From: Achim Gratz Subject: Re: [PATCH] ob-shell (was: 2 Org tests failing) Date: Sun, 22 Jun 2014 10:35:31 +0200 Message-ID: <87vbrt8hpo.fsf_-_@Rainer.invalid> References: <86vbsycepz.fsf@somewhere.org> <87tx8iks22.fsf@bzg.ath.cx> <86ppi6qnb5.fsf@somewhere.org> <87vbrxx4zr.fsf@Rainer.invalid> <86ppi5uwgl.fsf@somewhere.org> <877g4cacn9.fsf@Rainer.invalid> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:59857) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WydFe-0007yP-2G for emacs-orgmode@gnu.org; Sun, 22 Jun 2014 04:35:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WydFY-0002fN-57 for emacs-orgmode@gnu.org; Sun, 22 Jun 2014 04:35:49 -0400 Received: from plane.gmane.org ([80.91.229.3]:49928) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WydFX-0002fH-UI for emacs-orgmode@gnu.org; Sun, 22 Jun 2014 04:35:44 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1WydFX-0004CG-7G for emacs-orgmode@gnu.org; Sun, 22 Jun 2014 10:35:43 +0200 Received: from pd9eb0993.dip0.t-ipconnect.de ([217.235.9.147]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 22 Jun 2014 10:35:43 +0200 Received: from Stromeko by pd9eb0993.dip0.t-ipconnect.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 22 Jun 2014 10:35:43 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Achim Gratz writes: > Sebastien Vauban writes: >> I just ran `make test' and got the same error for >> `ob-shell/bash-uses-assoc-arrays'. > > Yes, that's because not all versions of bash that have associative > arrays can parse the bizarre quoting style that goes through a > sub-process and here-document that is used to fill in the parameters. Here's a patch that implements the suggestion and tested to work correctly with Cygwin and Linux. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-ob-shell-stratify-shell-variable-quoting.patch >From a79aff65d562e59ed4e01e550224eb96a665c1ae Mon Sep 17 00:00:00 2001 From: Achim Gratz Date: Thu, 19 Jun 2014 21:23:28 +0200 Subject: [PATCH] ob-shell: stratify shell variable quoting * 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 | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/lisp/ob-shell.el b/lisp/ob-shell.el index 474a8f2..7d87026 100644 --- a/lisp/ob-shell.el +++ b/lisp/ob-shell.el @@ -45,12 +45,6 @@ (defcustom org-babel-sh-command shell-file-name :group 'org-babel :type 'string) -(defcustom org-babel-sh-var-quote-fmt - "$(cat <<'BABEL_TABLE'\n%s\nBABEL_TABLE\n)" - "Format string used to escape variables when passed to shell scripts." - :group 'org-babel - :type 'string) - (defcustom org-babel-shell-names '("sh" "bash" "csh" "ash" "dash" "ksh" "mksh" "posh") "List of names of shell supported by babel shell code blocks." @@ -113,28 +107,26 @@ (defun org-babel-variable-assignments:sh-generic (defun org-babel-variable-assignments:bash_array (varname values &optional sep hline) "Returns a list of statements declaring the values as a bash array." - (format "unset %s\ndeclare -a %s=( \"%s\" )" - varname varname - (mapconcat 'identity - (mapcar - (lambda (value) (org-babel-sh-var-to-sh value sep hline)) - values) - "\" \""))) + (format "unset %s\ndeclare -a %s=( %s )" + varname varname + (mapconcat + (lambda (value) (org-babel-sh-var-to-sh value sep hline)) + values + " "))) (defun org-babel-variable-assignments:bash_assoc (varname values &optional sep hline) "Returns a list of statements declaring the values as bash associative array." (format "unset %s\ndeclare -A %s\n%s" varname varname - (mapconcat 'identity - (mapcar - (lambda (items) - (format "%s[\"%s\"]=%s" - varname - (org-babel-sh-var-to-sh (car items) sep hline) - (org-babel-sh-var-to-sh (cdr items) sep hline))) - values) - "\n"))) + (mapconcat + (lambda (items) + (format "%s[%s]=%s" + varname + (org-babel-sh-var-to-sh (car items) sep hline) + (org-babel-sh-var-to-sh (cdr items) sep hline))) + values + "\n"))) (defun org-babel-variable-assignments:bash (varname values &optional sep hline) "Represents the parameters as useful Bash shell variables." @@ -163,8 +155,10 @@ (defun org-babel-sh-var-to-sh (var &optional sep hline) "Convert an elisp value to a shell variable. Convert an elisp var into a string of shell commands specifying a var of the same value." - (format org-babel-sh-var-quote-fmt - (org-babel-sh-var-to-string var sep hline))) + (concat "'" (replace-regexp-in-string + "'" "'\"'\"'" + (org-babel-sh-var-to-string var sep hline)) + "'")) (defun org-babel-sh-var-to-string (var &optional sep hline) "Convert an elisp value to a string." -- 2.0.0 --=-=-= Content-Type: text/plain Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Waldorf MIDI Implementation & additional documentation: http://Synth.Stromeko.net/Downloads.html#WaldorfDocs --=-=-=--