A Single Bash Command To Simultaneously Run and Compile a CSharp (.cs) File
Posted on December 5, 2019
Background: 2019 Advent of Code and Microsoft Troubles
I've started the 2019 Advent of Code for this December! (This will be my first one - don't know how I've missed it in previous years!) Anyway, to get better at C#, which I may be using in the future for work, I decided to do all the Advent challenges in C#.
That's when I realized I didn't know how to simply "run" a .cs script. With Python scripts we can simply use python
, with Perl we have perl
, and so on.
Of course anything to do with Microsoft is never straightforward :rolling_eyes:. Up till now, I had always just sat back complacently and let Visual Studio run the code for me simply via the 'run' button. But for these fun Advent scripts, I decided to just keep it simple with Visual Studio Code.
The Bash Alias
I wanted a simple way to simultaneously compile and run my C# scripts, saving me from having to issue giant, or worse, multiple Bash commands each time.
To achieve such a behavior we need just a few simple steps:
- First, we must allow our bash function to accept a single argument: the filename of the desired
.cs
file to compile and run. - Compile that passed .cs file using
csc
, while also using the-nologo
flag to suppress the annoying copyright and info that is normally posted. - Execute the .exe file generated by
csc
.
Steps 2 and 3 will need to parse the filename argument separately such that csc
operates on the .cs
file, and mono
operates on the generated .exe
file.
I named my alias simply cs
, since it will be used for .cs files exclusively. Here it is in its full 6 lines of glory:
# usage: cs <<FileName.cs>>
# output: any stdout as well as any effects produced from the executing the compiled C# script
function cs() {
csc -nologo "${1%%.*}".cs;
mono "${1%%.*}".exe;
}
I haven't tested it too extensively, but it's working for me as long as the script to be compiled has a static main
method. (I think csc
warns you or throws an error otherwise). Go ahead and copy that into your .profile
, .bashrc
, or similar, and get rippin' with C# scripts!
-Cheers! 🍺
Chris