7 changed files with 78 additions and 29 deletions
@ -1,4 +1,4 @@ |
|||||
#lang racket/base |
#lang racket/base |
||||
|
|
||||
(require "bolt.rkt") |
(require "./src/bolt.rkt") |
||||
(provide (all-from-out "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