如何在Linux终端上执行C#代码作为shell脚本.
我有这个示例代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
当我运行shell bash时我会使用#!/bin/bash.如何用C#做同样的事情?
mic*_*ael 26
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
Run Code Online (Sandbox Code Playgroud)
假设您将上述脚本保存为/ 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");
}
}
Run Code Online (Sandbox Code Playgroud)
将上面的代码保存到诸如"hello.cs"之类的文件中,使其可执行,将第一行更改为指向先前保存的bash脚本,然后执行它,您应该看到以下输出以及一个对话框"Hello" GUI":
bash-4.2$ ./hello.cs foo bar baz
Hello Console
Arguments: foo, bar, baz
Run Code Online (Sandbox Code Playgroud)
请注意,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));
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,命令行参数将传递给C#脚本,但shebang参数(在"-r:System.Windows.Forms.dll -r:System.Drawing.dll"上面的第一个C#脚本中)将传递给C#编译器.使用后一种功能,您可以在C#脚本的第一行指定所需的任何编译器参数.
如果您对bash脚本如何工作的详细信息感兴趣,那么shebang(#!)将在C#脚本的第一行传递给它的所有参数汇总在一起,然后是脚本名称,然后是传递给脚本的命令行参数本身.在上面的第一个C#示例中,以下5个参数将传递给bash脚本(由引号描绘):
"-r:System.Windows.Forms.dll -r:System.Drawing.dll" "hello.cs" "foo" "bar" "baz"
Run Code Online (Sandbox Code Playgroud)
该脚本确定第一个参数不是文件名,并假定它包含C#编译器的参数.然后使用'tail'剥离C#脚本的第一行,并将结果保存到临时文件中(因为C#编译器不从stdin读取).最后,编译器的输出将保存到另一个临时文件中,并以单声道执行,并将原始参数传递给脚本.'shift'运算符用于消除编译器参数和脚本名称,只留下脚本参数.
执行C#脚本时,编译错误将被转储到命令行.
Sur*_*raj 23
当然可以完成并且过程非常简单.
在这里,我将解释Ubuntu Linux的步骤.
开放终端:
Ctrl+ Alt+T
类型
gedit hello.cs
Run Code Online (Sandbox Code Playgroud)
在gedit打开的窗口中粘贴以下示例代码:
using System;
class HelloWorld {
static void Main() {
Console.WriteLine("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
保存并关闭gedit.
返回终端类型:
sudo apt update
sudo apt install mono-complete
mcs -out:hello.exe hello.cs
mono hello.exe
Run Code Online (Sandbox Code Playgroud)
输出:
Hello World!
Run Code Online (Sandbox Code Playgroud)
Cor*_*rey 13
该#!(hashbang)标签是用来告诉使用哪种解释让你的Perl,PHP,庆典,SH等脚本将运行正确的外壳.
但是C#不是脚本语言,它旨在被编译成可执行格式.如果要使用C#,则需要至少安装编译器和运行时,最好是IDE(集成开发环境)来帮助您开发和调试应用程序.
为编译器和运行时安装Mono,然后为IDE 安装MonoDevelop.
安装单声道后,您可以使用csharp hello.cs. 从 Mono 2.10 开始,您还可以像这样使用 shebang:
#!/usr/bin/csharp
Console.WriteLine ("Hello, World");
Run Code Online (Sandbox Code Playgroud)
如果您需要程序集,您可以加载它们,例如使用LoadAssembly("System.IO.Compression")脚本中的一行。
参考:man csharp。
| 归档时间: |
|
| 查看次数: |
56977 次 |
| 最近记录: |