C#(.NET Core2.2)アプリをLinuxで動かし、シェルスクリプトを実行したらエラー
やりたいこと
- C#コンソールアプリにより、LinuxからWindowsのフォルダをマウントする(mountコマンド)
- Windows10上の仮想マシン(Linux)で、C#アプリを動かす
- C#アプリで、Linuxのシェルスクリプトファイル(.sh)を実行する
- .shファイルに、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)
1. C#アプリの準備
(1)「.NET Core SDK」をインストール(Windows10)
(今回は、.NET Core SDK 2.2.300)
https://dotnet.microsoft.com/download#/sdk
(2)Visual Studio Codeに、C#拡張機能をインストール
(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側の、マウントするディレクトリ
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箇条
Author And Source
この問題について(C#(.NET Core2.2)アプリをLinuxで動かし、シェルスクリプトを実行したらエラー), 我々は、より多くの情報をここで見つけました https://qiita.com/ryotsu_higemaru/items/98ca1cdfb52ec800cca9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .