summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Davison <davison@stats.ox.ac.uk>2010-10-14 21:36:42 +0100
committerDan Davison <davison@stats.ox.ac.uk>2010-10-21 13:05:58 +0100
commit8e151c066e94619a0772aacd4ef389614c3d448f (patch)
treeae5f9a4d91e5bdbb01bb16780d21abf617e2379e
parent24a5f8b4e524b40d3ec32f9d3859ebaf7abac140 (diff)
downloadorg-mode-8e151c066e94619a0772aacd4ef389614c3d448f.tar.gz
babel: sh: Fix variable assignments made by `org-babel-prep-session:sh'
* ob-sh.el (org-babel-expand-body:sh): Refactor: break variable assignment part out into a separate function (org-babel-sh-variable-assignments): New function constructing list of variable assignment statements (org-babel-prep-session:sh): Use new function `org-babel-sh-variable-assignments' instead of previous (incorrect) variable assignment code.
-rw-r--r--lisp/ob-sh.el31
1 files changed, 14 insertions, 17 deletions
diff --git a/lisp/ob-sh.el b/lisp/ob-sh.el
index 20dde69..c74d979 100644
--- a/lisp/ob-sh.el
+++ b/lisp/ob-sh.el
@@ -48,15 +48,10 @@ This will be passed to `shell-command-on-region'")
(defun org-babel-expand-body:sh (body params &optional processed-params)
"Expand BODY according to PARAMS, return the expanded body."
- (let ((vars (nth 1 (or processed-params (org-babel-process-params params))))
- (sep (cdr (assoc :separator params))))
- (concat
- (mapconcat ;; define any variables
- (lambda (pair)
- (format "%s=%s"
- (car pair)
- (org-babel-sh-var-to-sh (cdr pair) sep)))
- vars "\n") (if vars "\n" "") body "\n\n")))
+ (mapconcat
+ #'identity
+ (append (org-babel-sh-variable-assignments params processed-params)
+ (list body)) "\n")
(defun org-babel-execute:sh (body params)
"Execute a block of Shell commands with Babel.
@@ -76,14 +71,7 @@ This function is called by `org-babel-execute-src-block'."
(defun org-babel-prep-session:sh (session params)
"Prepare SESSION according to the header arguments specified in PARAMS."
(let* ((session (org-babel-sh-initiate-session session))
- (vars (org-babel-ref-variables params))
- (sep (cdr (assoc :separator params)))
- (var-lines (mapcar ;; define any variables
- (lambda (pair)
- (format "%s=%s"
- (car pair)
- (org-babel-sh-var-to-sh (cdr pair) sep)))
- vars)))
+ (var-lines (org-babel-sh-variable-assignments params)))
(org-babel-comint-in-buffer session
(mapc (lambda (var)
(insert var) (comint-send-input nil t)
@@ -101,6 +89,15 @@ This function is called by `org-babel-execute-src-block'."
;; helper functions
+(defun org-babel-sh-variable-assignments (params &optional processed-params)
+ (let ((sep (cdr (assoc :separator params))))
+ (mapcar
+ (lambda (pair)
+ (format "%s=%s"
+ (car pair)
+ (org-babel-sh-var-to-sh (cdr pair) sep)))
+ (nth 1 (or processed-params (org-babel-process-params params))))))
+
(defun org-babel-sh-var-to-sh (var &optional sep)
"Convert an elisp value to a shell variable.
Convert an elisp var into a string of shell commands specifying a