Mac環境でC#からシェルを実行

Mac環境でC#からシェルを実行

Mac環境でC#からシェルを実行する方法。
シェルの引数の指定の仕方。

関連ページ 参考URL
個人的なアプリ開発で、C#からMacのシェルを実行したい状況が出てきた。
幸い思ったより簡単に出来たので共有。シェル内の引数も指定できるので汎用性高いと思う。

ProcessStartInfoでシェルを実行

シンプルなシェルの実行

C#にはProcessStartInfoという機能があり、これを使うと外部アプリケーションを呼ぶことができます。
Mac環境でshファイルを実行するには、まずMacターミナルを呼び出し、そこから間接的にシェルを実行します。

例えば次のようなコードを書かれた、test.shファイルがあったとします。
内容としてはユーザーディレクトリ直下にtest.txtファイルを作成するコマンドになります。
touch ~/test.txt

これをC#から呼び出すコードは次の通り。
        var scriptPath = 
 [実行したいtest.shファイルのパス] 
;

        ProcessStartInfo pInfo = new ProcessStartInfo();
        pInfo.FileName = "/bin/bash";
        pInfo.Arguments = scriptPath;
        pInfo.ErrorDialog = true;
        pInfo.UseShellExecute = true;
        Process.Start(pInfo);
pInfo.FileNameに代入されている"/bin/bash"がターミナルを起動するコマンド。
次のpInfo.Argumentsに代入されているのがターミナルから実行するシェルになります。

引数有りでシェルを実行

指定したパスに対してファイルを作るtest.shというファイルがあったとします。
コードは次の通りで、$1部分が引数です。
touch $1

これをC#から呼び出すコードは次の通り。
        var scriptPath = 
 [実行したいtest.shファイルのパス] 
;
        var argument = 
 [シェルの引数に渡したいコード] 
;

        ProcessStartInfo pInfo = new ProcessStartInfo();
        pInfo.FileName = "/bin/bash";
        pInfo.Arguments = $"{scriptPath} {argument}";
        pInfo.ErrorDialog = true;
        pInfo.UseShellExecute = true;
        Process.Start(pInfo);
これで引数付きでシェルを実行できます。意外と簡単。
0
0