7 changed files with 78 additions and 29 deletions
@ -1,4 +1,4 @@ |
|||
#lang racket/base |
|||
|
|||
(require "bolt.rkt") |
|||
(provide (all-from-out "bolt.rkt")) |
|||
(require "./src/bolt.rkt") |
|||
(provide (all-from-out "./src/bolt.rkt")) |
|||
|
@ -0,0 +1,42 @@ |
|||
#lang racket |
|||
|
|||
(require "utils.rkt") |
|||
|
|||
(define default-env |
|||
#hash( |
|||
("LANG" . "en_US.UTF-8"))) |
|||
(struct |
|||
UserCommand |
|||
(username cmd)) |
|||
|
|||
(struct |
|||
WithDirectoryCommand |
|||
(directory cmd)) |
|||
|
|||
(struct |
|||
ExecCommand |
|||
(command env)) |
|||
|
|||
(define (printshell stx) |
|||
(match stx |
|||
[(WithDirectoryCommand directory cmd) |
|||
(format "cd ~a; ~a" directory (printshell cmd))] |
|||
|
|||
[(UserCommand username cmd) |
|||
(format "sudo -u ~a sh -c '~a'" |
|||
username |
|||
(printshell cmd))] |
|||
|
|||
[(ExecCommand command env) |
|||
(define funcname (gensym)) |
|||
(format "function ~a { ~a ~a; }; ~a" |
|||
funcname |
|||
(format-vars env) |
|||
command |
|||
funcname)])) |
|||
|
|||
(displayln |
|||
(printshell |
|||
(WithDirectoryCommand "/home/wes" |
|||
(UserCommand "wes" |
|||
(ExecCommand "echo $LANG" default-env))))) |
@ -0,0 +1,29 @@ |
|||
#lang racket |
|||
|
|||
(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)) |
|||
(define new-h2-vs (remove-dups h2-vs h1-vs)) |
|||
(make-hash (append new-h2-vs h1-vs))) |
|||
|
|||
(define (format-vars env) |
|||
(string-join |
|||
(hash-map |
|||
env |
|||
(lambda (k v) |
|||
(format "export ~a=~a;" k v))))) |
|||
|
|||
(provide |
|||
(all-defined-out)) |
Loading…
Reference in new issue