diff options
| -rw-r--r-- | scsh-process.scm | 24 | ||||
| -rw-r--r-- | test/run.scm | 16 | 
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 | 
