Congratulations for making it through the workshop. Most people, if they ever undertake a toy shell, stop around stage 1 or 2. You should at this point have a shell you could actually use as an interactive shell for a while. (Estimated length of time before it becomes too annoying, in my experience: about one month.)
I think there is a lot to be done with shells in general. I'll list here some starting points you might find interesting.
The shill project has some interesting ideas. ksh in openbsd
has a pledge
builtin. Can you make your shell scripts safer?
What about your interactive shell sessions? Or the dreaded curl | sh
?
-
advisory safety through annotation of commands with types describing their input or output
-
logic or constraint-based mechanisms -- for example, instead of globbing with wildcards, why not file-name unification?
-
example-based program synthesis
-
autodetect completions from manpage or
--help
output -
perhaps one could even come up with a clever unobtrusive manpage excerpt display not unlike popup help in many IDEs
-
real-time visualization of what will happen when a pipeline is executed
-
visualization of CPU/IO usage of elements of running pipeline
-
if your shell is in a VM-based language like Java or Erlang, you could speed up loading of other code in the same language, like the Android
zygote
concept -
you probably have many
git
-related tweaks to your current shell; could these be faster or tighter if you linked tolibgit2
directly? -
what about integration with
screen
ortmux
? -
what if you extended pipe syntax to conveniently support arbitrary sockets or ssh connections?
-
GNU parallel is a very popular tool; is it possible to provide its major features directly in a shell?
See also dgsh
.
-
it's often been noted that
make
andcron
, maybe with a dash ofinotify
, could have better integration with the shell, or be their own combined tool entirely. -
could you build a shell fuzzing or testing tool using what you have so far?