軽い Shell を作った
↓の記事を読んで自分でもサクッと作れそうなので作ってみた。
名前は nsh
(nonylene shell の略)。記事を参考にコードを書いていたら大体同じようなものになってしまった。
記事では C で書いているけど、nsh
では Python3 で書いてみた *1。結局パースで6割ぐらい占めていて、コマンドを実行するのはこの部分だけ。
def execute_line(args): pid = os.fork() if pid == 0: os.execvp(args[0], args) elif pid < 0: print("error with fork!") else: while True: wpid, status = os.waitpid(pid, os.WUNTRACED) if os.WIFEXITED(status) or os.WIFSIGNALED(status): break
それなりに使えるようになったので満足。
fork
して execvp
している以外は通常の Python の処理なので、特段困ったこともなく一時間ぐらいで作れたので良かった(小並感)。