Groovysh 用の新しいコマンドの作成に関する情報はほとんど見つかりませんでした。cmd.exe() をある程度置き換えて、開発環境の通常の部分として使用したいと思います。
groovysh には、新しいコマンドを登録できる「登録」コマンドがあることに気付きました。何も見つからなかった後、既存のコマンドのソースコードを調べて、これを思いつきました:
import org.codehaus.groovy.tools.shell.*
class test extends CommandSupport
{
public static final String COMMAND_NAME = 'findall'
// Printed when you use the help command specifying 'find' as an argument
String help="Help"
String usage="Usage"
// Printed when you use the help command with no arguments
String description="Description"
public test(org.codehaus.groovy.tools.shell.Groovysh shell)
{
super(shell, COMMAND_NAME, 'find')
}
Object execute(List<String> args)
{
return "Commanded "+args+" "+args.size()
}
}
これは私が望むことのほとんどを行いますが、いくつか問題があります。まず第一に、「execute」に渡されるものは醜い方法で事前に解析されます。「テスト奇妙な間隔」のような文字列を見つけようとすると、[「テスト、奇妙な、間隔」] が得られます。引用符を使用して、単一の文字列として引用されるはずだったものを再構築できますが、余分なスペースを置き換えることはできません"
2 つ目の問題は、タブ補完を使用したいということです。getCompleter および makeCompleters コマンドがあることがわかりますが、コンプリータが何であるかについての情報はありません...存在しないページへのjavadocsリンク。
JLine ライブラリにはコンプリータがありますが、それらが同じものかどうかはわかりません (JLine は groovysh からアクセスできないため、疑う傾向があります。スクリプトを記述するためにそれらを使用する必要がある場合は、それらがアクセス可能であると考えるでしょう)。
この種の作業を行う方法を説明しているブログを誰かが知っている場合、またはいくつかの最小限の例が配置されている場合は、助けていただければ幸いです。