There's no need to expressly initialize the instance variables in the FsShell ctor to null. Java will do that automatically.
Sure, I removed the initialization.
"The follow methods are syntactic sugar." - They're not really "syntactic" sugar, as much as they are just helpers.
"if (instance == null) throw new UnknownCommandException(cmd);" - coding guidelines say to put always use braces on if statements, and always put the body on a new line.
Changed. I found a few more, so I changed them too.
There seems to be an inconsistency with printing to stdout vs. stderr, or at least I can't tell why you chose to use one in some places, and the other in other places.
The -help/-usage commands will print to stdout. The usage goes to stderr when no command is given, or because of an illegal argument.
"// historical abstract method in Command " - move this comment above the method.