summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scsh-process.scm24
-rw-r--r--test/run.scm16
2 files changed, 24 insertions, 16 deletions
diff --git a/scsh-process.scm b/scsh-process.scm
index 9d92ac1..7d33f73 100644
--- a/scsh-process.scm
+++ b/scsh-process.scm
@@ -93,7 +93,7 @@
(define (run/sexp* thunk)
(read (run/port* thunk)))
(define (run/sexps* thunk)
- (read-all (run/port* thunk)))
+ (read-file (run/port* thunk)))
;;;;;;;;;;;;
;; Syntax ;;
@@ -194,27 +194,21 @@
((_ ((?from0 ?from1 ___ ?to) ___) ?pf0 ___ ?last-pf)
(let ((conns `((?from0 ?from1 ___ ?to) ___)))
(setup-redirection ?redir0) ...
- (begin (fork/pipe+ conns (lambda () (exec-epf (epf ?pf0))))
- ___
- (exec-epf (epf ?last-pf))))))))
+ (begin (fork/pipe+ conns (lambda () (exec-epf (epf ?pf0))))
+ ___
+ (exec-epf (epf ?last-pf))))))))
(pipe+ ?args ...)))
((_ (begin ?expr0 ...))
(begin (setup-redirection (= 0 (current-input-port)))
(setup-redirection (= 1 (current-output-port)))
(setup-redirection (= 2 (current-error-port)))
?expr0 ...))
- ;; epf can be used if you happen to have a program called
- ;; "epf", "begin", "pipe", etc which you'd like to run.
- ((_ (epf ?args ...))
- (let-syntax ((exec-epf
- (syntax-rules ___ ()
- ((_ (?prog ?arg0 ___) ?redir0 ___)
- (begin
- (setup-redirection ?redir0) ___
- (exec-path `?prog `?arg0 ___))))))
- (exec-epf ?args ...)))
+ ((_ (epf ?args ...)) ; TODO: Figure out the point of this
+ (exec-epf ?args ...))
;; This is purely for convenience, so you don't need the (epf ...) wrapper
((_ (?prog ?arg0 ...) ?redir0 ...)
- (exec-epf (epf (?prog ?arg0 ...) ?redir0 ...)))))
+ (begin
+ (setup-redirection ?redir0) ...
+ (exec-path `?prog `?arg0 ...)))))
) \ No newline at end of file
diff --git a/test/run.scm b/test/run.scm
index 1256845..d190c95 100644
--- a/test/run.scm
+++ b/test/run.scm
@@ -33,6 +33,20 @@
(test "Simple run/string"
"hi, there\n"
- (run/string (echo "hi, there"))))
+ (run/string (echo "hi, there")))
+
+ (test "Simple run/sexp"
+ '("hi, there")
+ (run/sexp (echo "(\"hi, there\")")))
+
+ (test "Simple run/sexps"
+ '(("hi, there") (a b c))
+ (run/sexps (echo "(\"hi, there\") (a b c)")))
+
+ (test "Nested output redirection with pipe+"
+ "foo\n"
+ (run/string (pipe+ ((1 0))
+ (pipe+ ((2 0)) (sh -c "echo foo >&2") (cat))
+ (cat)))))
(test-exit) \ No newline at end of file