Необходимо запустить скрипт написанный на Bash из программы написанной на C# .net core 2.2.
cd /home/jman/myapp/
./test
В программе на С# сделал через запуск команд (хелпер):
public string RunBashCommand(string cmd, Dictionary<string, string> environmentVariables = null)
{
using (var process = new Process())
{
process.StartInfo = new ProcessStartInfo
{
FileName = "/bin/bash",
Arguments = $"-c \"{cmd}\"",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
if (environmentVariables != null)
foreach (var variable in environmentVariables)
{
process.StartInfo.EnvironmentVariables[variable.Key] = variable.Value;
}
process.Start();
var result = process.StandardOutput.ReadToEnd().Trim('\n').Trim('\r');
process.WaitForExit();
return result;
}
}
И сам вызов:
private void LoadDevice()
{
Console.WriteLine(scriptRunner.RunBashCommand("cd /home/jman/myapp/"));
Console.WriteLine(scriptRunner.RunBashCommand("./test"));
}
Запускаю приложение написанное на C# в Ubuntu:
dotnet MyCoreApp.dll
И получаю ошибку:
/bin/bash: test: command not found
Собственно как правильно запустить скрипт?
Итак, благодаря советам @PotroNik удалось запускать Bash скрипты.
Создан класс - хелпер:
public class BashShellHelper
{
public string RunBashCommand(string cmd, Dictionary<string, string> environmentVariables = null)
{
using (var process = new Process())
{
process.StartInfo = new ProcessStartInfo
{
FileName = "/bin/bash",
Arguments = $"-c \"{cmd}\"",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
if (environmentVariables != null)
{
foreach (var variable in environmentVariables)
{
process.StartInfo.EnvironmentVariables[variable.Key] = variable.Value;
}
}
process.Start();
var result = process.StandardOutput.ReadToEnd().Trim('\n').Trim('\r');
process.WaitForExit();
return result;
}
}
public void RunBushScript(string cmd)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "/bin/bash",
Arguments = $"-c \"{cmd}\"",
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
},
EnableRaisingEvents = true
};
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
}
}
в основной программе реализованы следующие методы:
private readonly BashShellHelper scriptRunner =
new BashShellHelper();
private readonly loadDevScript = "cd /home/jman/myapp/;./test_load";
private readonly unloadDevScript = "cd /home/jman/my_second_app/;./test_unload";
public void LoadDevice()
{
Console.WriteLine(scriptRunner.RunBashCommand($"{loadDevScript}"));
}
И метод запускающий скрипт для выгрузки устройства:
public void UnloadDevice()
{
deviceManager.CloseDevice();
Console.WriteLine(scriptRunner.RunBashCommand($"{unloadDevScript}"));
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Написал чат бота и после того как ему задаёшь вопрос он отвечает но постоянно повторяет сообщение после отправкиПотом отключил его, но сегодня...
Есть кнопка в игре "Купить"При нажатии на неё через Ajax отправляются данные о юзере (Id, имя) и обрабатываются далее php скриптом (снимается баланс,...
Вообщем у меня есть код, который добавляет Теги из ArticleController - в таблицу Tag значения(поле алиас уникальное), и сохраняется в промежуточную таблицу...