シェルっぽいやつ
30分プログラム、その360。Unix/Linuxプログラミング理論と実践に影響されて、シェルっぽいやつを作ってみた。
パイプまでは作れなかったけど、バックグラウンドで実行するだけはつけておいた。
使い方
mzp $ gosh sh.scm $ ls /tmp launch-0j30hQ launch-40D1Rw launch-LHH7cE launchd-63.nfqo2J $ echo hoge hoge
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; sh.scm - ;; ;; Copyright(C) 2008 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2008/09/07 23:23:13 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (use util.match) (use srfi-1) (define (parse line) (let1 cmd (string-split line #\space) (cond ((string=? "&" (last cmd)) (cons 'bg (drop-right cmd 1))) (else cmd)))) (define (eval line) (match (parse line) (("") 0) (('bg . cmd) (sys-fork-and-exec (car cmd) cmd)) (cmd (sys-waitpid (sys-fork-and-exec (car cmd) cmd))))) (define (loop) (display "$ ") (flush) (let1 line (read-line) (unless (eof-object? line) (eval line) (loop)))) (loop)