Function: eshell-parse-pipeline
eshell-parse-pipeline is a byte-compiled function defined in
esh-cmd.el.gz.
Signature
(eshell-parse-pipeline TERMS)
Documentation
Parse a pipeline from TERMS, return the appropriate Lisp forms.
Source Code
;; Defined in /usr/src/emacs/lisp/eshell/esh-cmd.el.gz
(defun eshell-parse-pipeline (terms)
"Parse a pipeline from TERMS, return the appropriate Lisp forms."
(pcase-let*
((`(,bigpieces . ,sep-terms)
(eshell-split-commands terms "\\(&&\\|||\\)" nil t))
(results) (final))
(dolist (subterms bigpieces)
(let* ((pieces (eshell-split-commands subterms "|"))
(p pieces))
(while p
(let ((cmd (car p)))
(run-hook-with-args 'eshell-pre-rewrite-command-hook cmd)
(setq cmd (run-hook-with-args-until-success
'eshell-rewrite-command-hook cmd))
(let ((eshell--cmd cmd))
(run-hook-with-args 'eshell-post-rewrite-command-hook
'eshell--cmd)
(setq cmd eshell--cmd))
(setcar p (funcall eshell-post-rewrite-command-function cmd)))
(setq p (cdr p)))
(push (if (<= (length pieces) 1)
(car pieces)
(cl-assert (not eshell-in-pipeline-p))
`(eshell-execute-pipeline (quote ,pieces)))
results)))
;; `results' might be empty; this happens in the case of
;; multi-line input
(setq final (car results)
results (cdr results)
sep-terms (nreverse sep-terms))
(while results
(cl-assert (car sep-terms))
(setq final `(,(if (string= (pop sep-terms) "&&") 'and 'or)
(eshell-command-success
(eshell-deferrable ,(pop results)))
,final)))
final))