libshellish (formerly known as eshell) is a C++ library for adding basic shell-style input support to applications. While it does not add the complete power of a Unix shell to applications, it does provide a simple, client-extendable framework for adding console-style interactivity to software. It takes over the tasks of user input collection and dispatches the input to a set of client-defined "command handlers". Amongst other things, this is often useful when writing test applications for libraries which have no native GUI.

libshellish has evolved to be fairly useful since its original creation in 2001 and it is often used (by me) in the creation of test programs for C++ libraries.

Screenshots are available here (22k) and a much older screenshot (20k).

Its main features are:


Development Status: let's call it "stable beta". The current architecture has been in use since early 2004, and has steadily undergone improvements along the way. The project itself was started in 2001, and it has evolved considerably since then through three complete rewrites.

License: it is released into the Public Domain. It is designed to be linked to libreadline_cpp (see below), if the configure script can find it. If it is linked against a fully-functional readline_cpp then it links against GNU Readline and the resulting binary then necessarily falls under the GNU GPL.

What is readline_cpp?
This is an optional - but highly recommended - supplemental library which shellish supports if its configure script finds it. It is available from its own page. readline_cpp offers a front-end for collecting input from the console, and it supports GNU readline if it is available. Linking against GNU readline necessarily causes the resulting binaries to be released under the GNU General Public License (GPL), and using that support will change the license under which your copies of shellish and readline_cpp are maintained.


Filename Size (bytes) Date (Y.M.D)
libshellish-2007.05.29.tar.bz2 138028 2009.07.27

While the source tarball is quite large, half of it is the build-related files.

So how do i use shellish?

You can start by Reading The Fine Manual. :) That manual is quite out of date, from when this software was called "eshell". The overview it gives is still accurate, however. It may just be simpler to look at the two sample applications in the source tree, src/shellish/client.cpp and src/shellish/test.cpp.

Known bugs and shortcomings