We currently have a couple ways to pass files to Gremlin Console for execution. We have:
bin/gremlin.sh init.groovy and bin/gremlin.sh -e exec.groovy where the first one executes an initialization script for the console and then leaves the console open (unless there is a failure in executing the script) and the the second executes a script through the ScriptExecutor and takes arguments that configure the script. Both have their uses, but ScriptExecutor and -e are a hold-over from TinkerPop 2.x and they introduce a bit of an incongruity where a script that will run for the first command may not work when used with -e. ScriptExecutor is a wrapper for a standalone GremlinGroovyScriptEngine and therefore does not allow console commands to be executed. So if your exec.groovy contained: :remote connect tinkerpop.server conf/remote.yaml :> 1 + 1 because you were doing some automation with Gremlin and wanted to execute a remote script, you will get a failure. I think we have a fair bit of room for improvement here and as of Groovy 2.4.x there are some changes in groovysh that will allow us to drop some of our own internal code for doing these kinds of things. I'd basically propose that we: 1. Deprecate support for ScriptExecutor - it's too confusing to have these scripts execute in different ways through gremlin.sh. 2. Deprecate support of bin/gremlin.sh init.groovy (stop encouraging this usage pattern) 3. Add support for bin/gremlin.sh -i init.groovy which does the same thing as (2) and does not exit the console on failure. That would allow a user to work with their console session up to the point of failure. 4. Improve support for bin/gremlin.sh -e exec.groovy to no longer use ScriptExecutor and execute scripts directly in the console for automation purposes. 5. Add some other options to control output to the console so that you could do bin/gremlin.sh -q -e exec.groovy which would execute in a quiet mode with no output, for example. 6. Groovy's shell lets you do groovysh script1.groovy script2.groovy, script3.groovy..... We could do something like that too if we wanted, but we currently allow for something Groovy's shell does not: script arguments. I suppose we could do the multi-file thing and have some syntax for passing command line arguments. maybe like: bin/gremlin.sh -e script1.groovy [argument1 argument2] script2.groovy [arg1] - I don't think we could do this without a breaking change though, so perhaps we worry about this for 3.3.x whenever we get around to working on that. I plan to experiment on these changes in the coming days for 3.1.3. Please let me know if there are other thoughts on this matter.