Linux端末でC#コードをシェルスクリプトとして実行するにはどうすればよいですか。
私はこのサンプルコードを持っています:
public string Check(string _IPaddress,string _Port, int _SmsID)
{
ClassGlobal._client = new TcpClient(_IPaddress, Convert.ToInt32(_Port));
ClassGlobal.SMSID = _SmsID;
string _result = SendToCAS(_IPaddress, _Port, _SmsID );
if (_result != "") return (_result);
string _acoknoledgement = GetFromCAS();
return _acoknoledgement;
}
Shell bashを実行するときは、#!/bin/bash
を使用します。 C#で同じことをする方法はありますか?
#!
(hashbang)タグは、Perl、php、bash、shなどのスクリプトが正しく実行されるように、使用するインタープリターをシェルに指示するために使用されます。
ただし、C#はスクリプト言語ではなく、実行可能形式にコンパイルすることを目的としています。 C#を使用する場合は、少なくともコンパイラーとランタイムをインストールする必要があり、できればIDE( Integrated Development Environment )を使用して、アプリケーションの開発とデバッグを支援してください。
Mono をコンパイラとランタイムにインストールしてから、 MonoDevelop をIDEにインストールします。
C#スクリプトは、bashコマンドラインからPythonおよびPerlスクリプトと同じように実行できますが、動作させるには少しbashマジックが必要です。上記のCoreyのように、最初にインストールする必要があります- Mono ご使用のマシンで、次のコードをLinuxマシンの実行可能なbashスクリプトに保存します。
if [ ! -f "$1" ]; then
dmcs_args=$1
shift
else
dmcs_args=""
fi
script=$1
shift
input_cs="$(mktemp)"
output_exe="$(mktemp)"
tail -n +2 $script > $input_cs
dmcs $dmcs_args $input_cs -out:${output_exe} && mono $output_exe $@
rm -f $input_cs $output_exe
上記のスクリプトを/ usr/bin/csexecとして保存したと仮定すると、C#の「スクリプト」の例は次のとおりです。
#!/usr/bin/csexec -r:System.Windows.Forms.dll -r:System.Drawing.dll
using System;
using System.Drawing;
using System.Windows.Forms;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello Console");
Console.WriteLine("Arguments: " + string.Join(", ", args));
MessageBox.Show("Hello GUI");
}
}
上記のコードを「hello.cs」などのファイルに保存し、実行可能にし、最初に保存したbashスクリプトを指すように最初の行を変更してから実行すると、「Hello」というダイアログとともに次の出力が表示されますGUI」:
bash-4.2$ ./hello.cs foo bar baz
Hello Console
Arguments: foo, bar, baz
GUIでは、実行レベル5である必要があることに注意してください。以下は、純粋なテキストコンソールで実行される簡単なC#スクリプトです。
#!/usr/bin/csexec
using System;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello Console");
Console.WriteLine("Arguments: " + string.Join(", ", args));
}
}
コマンドライン引数はC#スクリプトに渡されますが、シバン引数(上記の最初のC#スクリプト「-r:System.Windows.Forms.dll -r:System.Drawing.dll」)はC#に渡されることに注意してください。コンパイラ。後者の機能を使用すると、C#スクリプトの最初の行で必要なコンパイラー引数を指定できます。
Bashスクリプトの動作方法の詳細に興味がある場合、Shebang(#!)は、C#スクリプトの最初の行で渡されたすべての引数をまとめ、スクリプト名、スクリプトに渡されたコマンドライン引数が続きます。自体。上記の最初のC#の例では、次の5つの引数がbashスクリプトに渡されます(引用符で囲まれています)。
"-r:System.Windows.Forms.dll -r:System.Drawing.dll" "hello.cs" "foo" "bar" "baz"
スクリプトは、最初の引数がファイル名ではないと判断し、C#コンパイラの引数が含まれていると想定します。次に、「tail」を使用してC#スクリプトの最初の行を取り除き、結果を一時ファイルに保存します(C#コンパイラはstdinから読み取らないため)。最後に、コンパイラの出力は別の一時ファイルに保存され、スクリプトに渡された元の引数とともにモノラルで実行されます。 「shift」演算子は、コンパイラー引数とスクリプト名を削除し、スクリプト引数のみを残すために使用されます。
C#スクリプトが実行されると、コンパイルエラーがコマンドラインにダンプされます。
もちろん、それを行うことができ、プロセスは非常に簡単です。
ここでは、Ubuntu Linuxの手順を説明しています。
ターミナルを開く:
Ctrl + Alt + T
タイプ
gedit hello.cs
開いたgedit
ウィンドウに、次のサンプルコードを貼り付けます。
using System;
class HelloWorld {
static void Main() {
Console.WriteLine("Hello World!");
}
}
Geditを保存して閉じます。
ターミナルタイプに戻る:
Sudo apt update
Sudo apt install mono-complete
mcs -out:hello.exe hello.cs
mono hello.exe
出力:
Hello World!
スクリプトのようにC#を実行することはできません。最初にコンパイルする必要があります。そのために、 mono をインストールできます。
その後、mcs
を使用してプログラムをコンパイルし、mono
を使用して実行できます。
モノをインストールしたら、_csharp hello.cs
_を使用できます。 Mono 2.10以降では、次のようにShebangを使用することもできます。
_#!/usr/bin/csharp
Console.WriteLine ("Hello, World");
_
アセンブリが必要な場合は、ロードできます。スクリプト内にLoadAssembly("System.IO.Compression")
という行があります。
参照:_man csharp
_。