m1gin 26

I felt excited when noticed I can run C# commands with mono csharp shell using Terminal in Linux.
Let's try it...

First of all, for Ubuntu, mono-csharp-shell package should be installed on your system.

To start C# shell:

$ csharp
csharp> using System.IO;
csharp> Directory.GetFiles("/etc");

We can also load a dll library and call a function in it:

csharp> LoadAssembly ("/media/data/lib/mbLib/bin/mbLib.dll");
csharp>
mbLib.Dosya.Download( "https://ssl.gstatic.com/dictionary/static/sounds/de/0/test.mp3", "/media/os/sil", "test.mp3");

We can also run C# code from file:

$ csharp /media/os/sil/test.csx

test.csx file content:

LoadAssembly ("/media/data/lib/mbLib/bin/mbLib.dll");
try{
var r = mbLib.Dosya.Download( "https://ssl.gstatic.com/dictionary/static/sounds/de/0/test.mp3", "/media/os/sil", "test.mp3");
Console.WriteLine("Download size: " + r);
}catch(Exception ex){
Console.WriteLine(ex.Message);
}

Note: .csx and .dll files in ~/.config/csharp folder, loaded at start. We can copy frequently used library or create startup scripts there.

Run C# Code Block and Return:

I spent a few hours to be able to pass a parameter from Terminal. But the help output not listed a parameter like this.
Finally, I thought I could play with source code. I download the source and opened it with MonoDevelop. When I examining it I noticed that, "-e" parameter (not listed in help output) already allow to run and exit.
I don't know why the developers not listing this -e parameter on help output.
Then I tried man page. It was listed there. It's my mistake not to look at man page a few hours ago. So there is no reason anymore to edit the source for me.

$ csharp -e 'Math.Pow(3,4);'
output: 81

Whe can also pass parameter from terminal and get result as bash variable:

$ a=" abc xyz 123 "
$ b=$(csharp -e "string s=\"$a\"; Console.Write(s.Trim());");
$ echo =$b=
output: =abc xyz 123=

Isn't it excited? :)

One more example... This shows how long will it take to run the command block:

$ csharp -e "Time (() => { string[] s = System.IO.Directory.GetFiles(\".\"); print(s.Length + \" files found in current dir.\"); foreach (string f in s) print(f); });"

Extended Samples:

Read from XML Files and Insert into SQLite Database

The following code block demonstrating how to read data from multiple XML files and insert to SQLite database using Terminal.

$ for f in *.xml; do sql=$(csharp -e 'var xdoc = new System.Xml.XmlDocument(); xdoc.Load('\"$f\"'); string word=xdoc.GetElementsByTagName("word").Item(0).InnerText; string definition=xdoc.GetElementsByTagName("definition").Item(0).InnerText; string sentence=xdoc.GetElementsByTagName("sentence").Item(0).InnerText; string s=string.Format("INSERT INTO wordmaster(word, definition, sentence, extra) VALUES (\"{0}\", \"{1}\",\"{2}\",\"{3}\") ", word, definition , sentence, '\"$f\"'); Console.Write(s);'); sqlite3 wm.sqlite "$sql"; sleep 0.1; done;


#from blog.mbirgin.com, archive, linux, mono, mono csharp shell, c# shell, terminal, bash c#, ubuntu, .net, pass bash variable to c#, using c# in terminal, using c# with bash script, csharp script

Add to: