
Create Your Own Shell in Python - supasate
https://hackercollider.com/articles/2016/07/05/create-your-own-shell-in-python-part-1/
======
acoderhasnoname
the pythonic way of doing this is:
[https://docs.python.org/3/library/cmd.html](https://docs.python.org/3/library/cmd.html)

~~~
Marazan
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"

~~~
agumonkey
There are some youtube talks about python metaprogramming that you might enjoy
later on. Your colleagues a little less.

------
pacaro
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
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
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_...](https://en.m.wikipedia.org/wiki/Advanced_Programming_in_the_Unix_Environment)

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.

~~~
Nullabillity
Of course, a lot of the daemon boilerplate no longer really applies in the
modern systemd world.

~~~
JdeBP
It didn't in fact apply to a sizeable portion of the pre-systemd world,
either. systemd doco gives the quite false impression that this stuff is _new_
, for " _new-style_ daemons". _Not_ using this boilerplate has been the right
way to write daemons for many systems over the past quarter century, going
back to the release of the IBM System Resource Controller at the beginning of
the 1990s.

------
munyari
How does one implement logical connectives? (&&, ||)

~~~
OJFord
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.

