This is one of those cases that you go down the rabbit hole and end up doing ten different things before the one that you initially wanted to!
My original intention was to try out kscript. What I ended up doing is learning about dockerfiles, building images and trying to run
.kts files without having kscript, or kotlin, installed locally in my machine!
I wanted to play with
kscript but did not want to install it on my machine. I don’t like bloating my OS by having libraries and software that might not be used often.
Having everything installed in a docker image and use containers to play with
kscript was a one way street for what I wanted to achieve.
It was my first dockerfile but there are tons of tutorials that helped me out. I ended up using alpine, installing java through its repositories, sdkman using its installation guide and kotlin, kscript through sdkman!
kscript was added as the image’s entry point which means that every time a container is being run
kscript will be the first command that gets executed.
And it worked for the most parts. By executing
docker run –rm -i kscript < params >
--rm to remove the container after its done, -i to have the script’s output passed to the terminal
I was able to use
kscript as described in its repository, except for the case of having a
For the case of a
.kts file what turned out to solve my problem was to pass the file’s entire content. And this is part of what kscript-router.sh does. It checks if the first parameter is a .kts file and if so it passes its contents to the container. In every other case it passes all given parameters directly to the container.
To tie everything together I added a script that creates the image, adds the router script to the user’s path and creates an alias, named
kscript, for executing the router.