top | item 12044825

Create Your Own Shell in Python

75 points| supasate | 9 years ago |hackercollider.com | reply

12 comments

order
[+] acoderhasnoname|9 years ago|reply
the pythonic way of doing this is: https://docs.python.org/3/library/cmd.html
[+] Marazan|9 years ago|reply
Reading the sorce code for cmd gave me my first "I am enlightened" moment when first programming in Python.

"You mean I just add a do_functionname method and that gives me a functionname command in the shell? And I can understand the 'refection' code that does this, and it dosen't look like incredibly verbose black-magiv-voodoo? I'm sold"

[+] pacaro|9 years ago|reply
Another fun thing you can do is create a shell that only runs with the '-c' command line flag. If this is set as the default shell for a user, then you can use ssh as a simplistic rpc transport.
[+] hackeradam17|9 years ago|reply
The funny thing is that I was literally just wondering about how shells are implemented right before getting on HN. Thanks for sharing, this should prove most useful :)
[+] csl|9 years ago|reply
If you often wonder about such things, I highly recommend the book "Advanced programming in the UNIX environment" by Stevens/Rago: https://en.m.wikipedia.org/wiki/Advanced_Programming_in_the_...

It covers a lot of stuff in an authoritative way. For example, how one should implement a daemon properly (e.g., chdir to root to allow for unmounting the disk the program originally ran from, lots of stuff like that). I'll actually doubly recommend it, because it's so good.

[+] rhinoceraptor|9 years ago|reply
It's also shocking how simple pipes and redirection are. You just use the dup2 syscall to arrange file descriptors.
[+] munyari|9 years ago|reply
How does one implement logical connectives? (&&, ||)
[+] OJFord|9 years ago|reply
There are many ways that one might; perhaps the simplest might be to just define them as a builtin to your shell that checks the exit code of the left-hand command, and executes or doesn't the right-hand command accordingly.