Pass args to F#/C# Scripts

Octopus, beside PowerShell and Bash scripts, can also run F# and C# scripts.

For F# scripting is something natural, functional paradigm nicely fits into scripting approach as it does not include Circular Dependency. F# scripts can be saved as .fsx files and run from console.

C#, hovewer, is Object Oriented and things were a little bit more tricky. Luckly, some folks have created ScriptCs which allow C# to be used in scripting way. ScriptCs scripts can be saved as .csx files.

But here's a catch: scripting doesn't know the idea of Main method as starting point. You simply start going through the code, top to bottom.

So how can we access passed arguments if there's no Main?

Turns out, it's quite simple. There is System.Environment.GetCommandLineArgs

Here is how it looks like for F#

System.Environment.GetCommandLineArgs()
|> Seq.iter (fun x -> printfn "%s" x)

Run it with

dotnet fsi .\fsharp.fsx -- arg1 arg2

And for ScriptCs (C#)

foreach (var i in Environment.GetCommandLineArgs())
    Console.WriteLine(i);

Run it with

 scriptcs main.csx -- arg1 arg2
comments powered by Disqus