A good CLI has to satisfy a number of conditions, IMHO:<p>* Human-friendly interaction:<p>-- Command completion<p>-- Help for all commands<p>-- Doesn't need a load of APL-like runes in order to achieve anything<p>-- Intuitively obvious, so far as possible<p>-- Low bar for entry<p>* Not too verbose (something that requires the equivalent of COBOL's "ADD A TO B GIVING C" ain't gonna roll, sorry!)<p>* Sensible and consistent<p>* Embeds a full programming language - but you don't need that language to run straightforward commands<p>* Completely embraces parallelism without pain<p>-- Including being able to spin off and manage daemon processes<p>-- And having a painless way of managing (plumbing, in other words) inputs and outputs of each stage - {Uni,Linu}x shells haven't really improved the way they do this in over thirty years, and they didn't get it right the first time!<p>* As much as possible of the operating system's capability should be exposed, to as deep a level as possible, through the CLI<p>* Not tied to one operating system - inherently capable of being applied to any (or at least any common one)<p>My preference would be that the CLI presents a genuinely object-oriented representation of data and the programs that know how to interpret the data, plus the operating system services as well.<p>Microsoft's PowerShell satisfies a lot of these requirements...however, it falls way short of the "Low bar for entry" criterion, as anyone who's tried to learn it casually will have discovered the hard way.<p>A Pythonic shell could also be made to work (yes, I've tried using Python as a shell. No, it didn't go well), but would require a bit of nurdling to bring it into compliance with most of the requirements above, particularly the human interface ones.<p>A lot of questions here - a lot fewer answers, but I thought I'd throw out these thoughts for the assembled masses to contemplate, be inspired by, or tear to pieces.