Browse Source

overrideable shell environment variables macro implemented

pull/1/head
Wesley Kerfoot 6 years ago
parent
commit
b109df97f8
  1. 5
      bolt.rkt
  2. 44
      shell_env.rkt

5
bolt.rkt

@ -56,8 +56,9 @@
(define (as-user cmd)
(if
(user)
(format "sudo -u ~a sh -c \"~a\""
(format "sudo -u ~a ~a sh -c \"~a\""
(user)
(format-vars)
cmd)
cmd))
@ -102,4 +103,4 @@
(define pwd (make-cmd "pwd"))
(provide
(all-defined-out) remote compress shell-env set-vars format-vars)
(all-defined-out) remote compress shell-env set-vars format-vars with-shell-vars)

44
shell_env.rkt

@ -1,12 +1,29 @@
#lang racket
(define default-shell-vars
#hash(
("LANG" . "en_US.UTF-8")))
(define shell-env
(make-parameter #hash()))
(make-parameter default-shell-vars))
(define (remove-dups xs ys)
(define dups
(set-intersect (map car xs)
(map car ys)))
(define new-xs
(filter-not
(compose1
(lambda (x) (member x dups))
car)
xs))
new-xs)
(define (merge-hash h1 h2)
(define h1-vs (hash->list h1))
(define h2-vs (hash->list h2))
(make-hash (append h1-vs h2-vs)))
(define new-h2-vs (remove-dups h2-vs h1-vs))
(make-hash (append new-h2-vs h1-vs)))
(define (merge-hashes . hs)
(foldl merge-hash #hash() hs))
@ -25,8 +42,29 @@
(lambda (k v)
(format "~a=~a" k v)))))
(define-syntax join-shell-vars
(syntax-rules ()
[(join-shell-vars (k v))
(merge-hash
(make-hash
(list (cons k v)))
(shell-env))]
[(join-shell-vars (k v) rest ...)
(merge-hash
(make-hash (list (cons k v)))
(join-shell-vars rest ...))]))
(define-syntax with-shell-vars
(syntax-rules ()
[(with-shell-vars (vars ...) expr ...)
(parameterize
[(shell-env (join-shell-vars vars ...))]
(begin expr ...))]))
(provide
shell-env
merge-hashes
set-vars
format-vars)
format-vars
with-shell-vars)

Loading…
Cancel
Save