.Net Core 程序在Raspberry Pi 3B+树莓派的Raspbian系统中执行Shell脚本
现在需要C#程序中执行一个跟NTP服务器同步的脚本,后参考了这篇文章 .NET Core 跨平台执行命令、脚本,使用ProcessStartInfo、Process 类实现了功能。
1.编写shell脚本
注意:请不要在windows系统下创建shell脚本,我是在linux环境下创建了shell文件夹,然后在shell文件夹下创建了timeSynchronization.sh文件,并赋予了 777 权限。
timeSynchronization.sh文件内容如下:
#!/bin/bash
sudo ntpdate 10.170.1.71
2.编写C#代码
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace SetLinuxShellDemo
{
class Program
{
static void Main(string[] args)
{
string fileName = "shell/timeSynchronization.sh";
//创建一个ProcessStartInfo对象 使用系统shell 指定命令和参数 设置标准输出
var psi = new ProcessStartInfo(fileName) { RedirectStandardOutput = true };
//启动
var proc = Process.Start(psi);
if (proc == null)
{
Console.WriteLine("Can not exec.");
}
else
{
Console.WriteLine("-------------Start read standard output--------------");
//开始读取
using (var sr = proc.StandardOutput)
{
while (!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine());
}
if (!proc.HasExited)
{
proc.Kill();
}
}
Console.WriteLine("---------------Read end------------------");
Console.WriteLine($"Exited Code : {proc.ExitCode}");
}
Console.ReadKey();
}
}
}