LoginSignup
9
5

More than 3 years have passed since last update.

C#(.NET Core2.2)アプリをLinuxで動かし、シェルスクリプトを実行したらエラー

Last updated at Posted at 2019-05-31

やりたいこと

  • C#コンソールアプリにより、LinuxからWindowsのフォルダをマウントする(mountコマンド)
    • Windows10上の仮想マシン(Linux)で、C#アプリを動かす
    • C#アプリで、Linuxのシェルスクリプトファイル(.sh)を実行する
    • .shファイルに、mountコマンドを記述しておく

経緯

仕事で検証が必要になったため。

環境

  • ホストマシン:Windows10
  • ゲストマシン:CentOS 7(Windows10のVirtualBox上)
  • 開発言語:C#(.NET Core2.2)
  • エディタ、ビルド:Visual Studio Code 1.34.0(Windows10上)

手順

1. C#アプリの準備

(1)「.NET Core SDK」をインストール(Windows10)

(今回は、.NET Core SDK 2.2.300)
https://dotnet.microsoft.com/download#/sdk

(2)Visual Studio Codeに、C#拡張機能をインストール

image.png

(3)コーディング、ビルド

次のようなコードで、.shを実行します。(真新しいことはありません・・・)

using System.Diagnostics;
// (省略)
  var processInfo = new ProcessStartInfo();
  processInfo.FileName = "/bin/sh";
  processInfo.UseShellExecute = false;
  processInfo.RedirectStandardOutput = true;
  processInfo.Arguments = @"./xxx.sh";

  Process process = Process.Start(processInfo);
  var stdOutput = process.StandardOutput.ReadToEnd();
  process.WaitForExit();

Linux用に、自己完結型の展開でビルドしました。

dotnet publish -c Release -f netcoreapp2.2 -r linux-x64 --self-contained true

2. .shファイルの準備

次のようなコマンドを記述。
・share_test:VirtualBoxで設定した共有フォルダー名
・/mnt/win_test:Linux側の、マウントするディレクトリ

xxx.sh
sudo mount -t vboxsf share_test /mnt/win_test

確認結果

エラー

Linux上でアプリを実行したところ、次のようなエラーが発生し、マウントされませんでした。

No such file or directory

確認

  • コマンド自体は不備がない
     .shファイルに記述しているコマンドを、Linuxのターミナルで実行すると正常にマウントできます。

  • C#から.shファイルの実行も問題なさそう
     また、.shファイルにecho XXというコマンドを記述すると正常に出力されます。

原因

.shファイル内の改行コードに問題がありました。
-> 改行が「Cr+Lf」になっていた。
-> 「Lf」で保存したところ、正常にマウントできました。

Linuxは改行をLfで判断する為、記述したコマンドに「Cr」まで含まれてしまい、
そんなはパスは存在しないというエラーになっていたようです。
(Linuxをあまり使った事がなく、なかなか分かりませんでした・・・)

今後

結局、開発言語は関係なく、単にLinuxについて勉強不足という話でした。
きちんと勉強しようと思います。。

参考

↓この情報に辿り着くまで時間が掛かりました・・・
シェルスクリプトを書くときに気をつける9箇条

9
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5