Сценарии C# можно запускать из командной строки bash так же, как скрипты Python и Perl, но для ее работы требуется немного магии bash. Как упоминалось выше Кори, вы должны сначала установить Mono на свой компьютер. Затем сохраните следующий код в исполняемый Баш скрипт на вашей машине Linux:
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 [email protected]
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
Обратите внимание, что интерфейс требует, чтобы вы были на уровне выполнения 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# сценарий, но аргументы shebang (в первом скрипте C# выше «-r: System.Windows.Forms.dll -r: System.Drawing.dll») передаются компилятору C#. Используя последнюю функциональность, вы можете указать любые аргументы компилятора, которые вам нужны, в первой строке вашего сценария C#.
Если вам интересно узнать, как работает скрипт bash, shebang (#!) Объединяет все переданные ему аргументы в первой строке скрипта C#, за которым следует имя сценария, за которым следуют аргументы командной строки передается самому скрипту. В первом C# примера выше, следующие 5 аргументов будут переданы в скрипт Баша (очерченный кавычка):
"-r:System.Windows.Forms.dll -r:System.Drawing.dll" "hello.cs" "foo" "bar" "baz"
Сценарий определяет, что первый аргумент не является именем файла и предполагается, что он содержит аргументы для C# компилятор.Затем он отбрасывает первую строку скрипта C#, используя «tail» и сохраняет результат во временный файл (поскольку компилятор C# не читает из stdin). Наконец, вывод компилятора сохраняется в другом временном файле и выполняется в моно с исходными аргументами, переданными скрипту. Оператор «shift» используется для устранения аргументов компилятора и имени сценария, оставляя только аргументы сценария.
Ошибки компиляции будут сбрасываться в командную строку при выполнении сценария C#.
использовать что-то вроде кодоблок компилировать .... – User2012384
Вы можете запустить C# сценарий без компиляции трюков. См. [http://stackoverflow.com/questions/8371560/mono-shell-scripting](http://stackoverflow.com/questions/8371560/mono-shell-scripting) – Massimo