• 締切済み

C#で仮想環境上(Linux)のスクリプト実行

Windowsアプリケーションから、VirtualBox(仮想化ソフト)上の Linuxのシェルスクリプトが実行されるようにしたいと考えているのですが、 どのような手法があるか、ご教授頂けますでしょうか。 イメージとしては、 Visual Studio上で実行ボタンをクリックすると、 Windows上で実行されるのと同様に、 Windowsアプリケーション上のボタンをクリックすると、 Linux上のシェルスクリプトが実行されるようにしたいと考えております。 仮想環境は起動していることが前提です。 また、開発環境は Visual C# (2010)です。 よろしくお願いいたします。

みんなの回答

  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.1

UDPかTCPで通信してはいかがでしょう? Linux上で動作する簡単なデーモンをいっこ作って、(例えばUDP Port12345でListenするもの) 動作命令を受信したらシェルスクリプトを実行。 C言語であればsystem("/path/to/hoge.sh");とかですね。 1.Linuxでスクリプト起動指示待受デーモンを実行 2.C#からUDP Port12345で仮想PCのIPアドレスにスクリプト実行要求送出 3.Linuxでスクリプト実行要求受信 4.system()関数でシェルスクリプト実行 もちろんTCPでもいいしPort番号も別のものでOKです。 ほかには、LinuxでApache+PHPとか動かして、http://[virtualbox-ip]/start.phpにアクセスすると シェルスクリプトが動作するようにしておくとか。 この場合はC#からHTTPアクセスさせればOKですね。 スクリプト側では <? system('/path/to/hoge.sh'); ?> といった感じですね。 パケット使う以外の方法は思いつきいませんでした。 気に入らなかったらすんません。

KAZUYOSHI_SAITO
質問者

お礼

早速のご回答ありがとうございます! 自分なりに調査した結果、 下記のようにSharpSSHというライブラリを利用してLinuxコマンドを送信できることがわかりました。 ///////////////////// SshExec exec = new SshExec("192.168.0.1", "user", "pass"); exec.Connect(); string stdOut = null; string stdError = null; exec.RunCommand("test.sh", ref stdOut, ref stdError); Console.WriteLine(stdOut); exec.Close(); ///////////////////// しかし、TeraTermなどのターミナルからスクリプトを実行した際と、 SharpSSHを用いてスクリプトを実行した際において 設定されている環境変数が異なる(envコマンドで比較するとSharpSSH側が少ない)ようで、 正常に実行されませんでした。 事前にすべての環境変数をexportコマンドで設定することで回避はできましたが、 あまりいい方法では無い気がしますので ご教授頂いた方法も検討させて頂きたいと思います。

関連するQ&A

  • 自宅でlinux環境を作ってC言語を書けますか?

    表題の環境でコーディングをしたいです。 【質問1】 参考になるサイトなどはありますでしょうか? 【質問2】 linux環境での開発を、windows環境で開発をすることは可能なのでしょうか? 仮にvisual studio が入っているwindows環境があったとして、 makeファイルをvisual studio 用に変換&インポートしたり、 逆にvisual studioのプロジェクトファイル?をmakeファイルに変換したりすることをしたいです。 参考になるサイトなどはありますでしょうか? .

  • Linux シェルスクリプトについての質問です

    Linux上で 日頃、簡単な シェルスクリプトを書き実行していますが、 この頃、より自動化をしたいと思い、シェルスクリプトの中に キーボードのキーを 押したかの様な動作をさせられないかを考えています。 やりたいことは、シェルスクリプトを実行すると、knoppix の partimage にてファイル等を 指定して、1行で実行は出来るのですが、続行するのは F5 キー を押したり Enter キーを押したりの作業が必要です。 この問題は、何か他ので対処が出来るのかもしれないですが、今後、どうしても キーをおさなきゃならない環境が来たときにも対処が出来るように シェルスクリプトでこのような事が可能なのかを知りたく質問させて頂きました。 どなたか分かれば回答を宜しくお願いします。

  • サポート終了後のXP上の仮想環境に最適なLinux

    http://okwave.jp/qa/q8480895.html どうも仮想環境上のLinuxの方だけ通信を許可することが可能なようなのです。 ですがLinux経験はたぶん3ぐらいのバージョンのKnoppixや8ぐらいの時代にUbuntuを使ったのが最後で最近の動向が分かりません。 Linux mintというのがブームなようですが、使い勝手はどんなもんでしょうか。検索して情報を集めてますが、PCに直接インストールする場合は大きな問題もないように見えます。でも仮想環境上だとどんな感じでしょうか。 PCに直接インストールでなく、仮想環境上(VMWAREPLAYERかVIRTUALBOX)に入れて使うとき最適なLinuxは何だと思いますか。

  • USBを使ったOSの仮想化環境実行について

    こんばんは USBメモリにLinuxをいれて、仮想化環境で実行したいと思ってます。 USBを入れるだけで仮想化環境を立ち上げるにはどうすればよいのでしょうか? 出来るだけソフトを使うならフリーがいいです。 おねがいします

  • 64ビット開発環境構築について

    64bitアプリケーションの開発環境構築で悩んでます。 現在の環境は、Microsoft Visual Studio 6.0、 Visual C++ 6.0です。 Milrosoft Pratform SDK SP1もインストールしました。 で、どのようにすると、64bitアプリケーションを作成できるのでしょうか? Visual Studio 2003.NETや2005の手法は見つけるのですが、Studio 6.0 また、Visual C++ 6.0での方法が見つかりません。 どなたか、やられたことのある方、もしくは参考のサイトをご存知の方は教えてください。 よろしくお願いします。

  • Linuxでシェルスクリプトがフルパスだと実行できない

    Linuxでシェルスクリプトがフルパスだと実行できない こんにちは 現在linuxでシェルスクリプトを記載していて、やっと出来た!と思ったら、なぜかフルパスで実行すると失敗します。 中身は例えば #!bin/sh echo "hello" とし、ファイル名をtest.shとします。 実行時にカレントからだと上手くいきます。 ./test.sh ただし、フルパスで実行するとうまくいきません。 ./home/user/test.sh エラーは以下 bash: ./home/dv3/tet.sh:No such file or directory 所有者はrootでグループもrootにしてあります。 シェルの権限は755にして、rootで実行しています。 なぜカレントだと上手くいき、フルパスだと上手くいかないのでしょうか? パスが必要なコマンドも入っていないのに。。。 どなたかご教授いただけると幸いです。 宜しくお願い致します。

  • MinGW,msysでCスクリプトの実行

    windows上でCシェルスクリプトで書かれたファイルを実行する必要が生じました。 これまではcygwin上で難なくやっていたのですが、cygwinは大きいので、これをやめてMinGWにしたため、Cシェルスクリプトが流れなくて困っています。MinGW、msysにはCシェルは無いようです。そこで、MinGW,msys,minttyの環境下で以下のようにやってみたのですが、これでよいのでしょうか? (1)MinGW,msys,minttyをインストール(Bシェルの環境ができる) (2)tcsh.exeをwebからダウンロード(ftp://ftp.funet.fi/pub/unix/shells/tcsh/) (3)tcsh.exeをmsysの/binに入れて、cshにハードリンクを張る(#ln tcsh.exe csh) これで簡単なCシェルスクリプトは流れるようですが、そのCシェルスクリプトの中で、さらにスクリプトファイルを実行させるようなスクリプトはうまく流れません。結局、試行錯誤の結果、以下のように、csh,shを頭に付加してようやく流れるようになりました。 ・元のファイル(script-a,bは流れない) #!/bin/csh -f ........... ./script-a(Cシェル) ./script-b(Bシェル) ........... ・修正後(ようやく流れた) #!/bin/csh -f ........... csh ./script-a(Cシェル) sh ./script-b(Bシェル) ........... 何故このようにしなければいけないのか?また、minttyでCシェルスクリプトを流す方法はこれでよいのか?(他に方法はないのか?)ご教示頂ければと思います。 当方、シェルスクリプトは全く素人で質問自体が的外れかもしれませんがよろしくお願いします。

  • 実行環境

    現在Visual Studio .Netで、VBを使用してあるソフトを開発しています。 初心者です。 作成されたexeファイルは、Visual Studioがインストールされていないパソコンでも実行できますか??

  • シェルスクリプトの実行

    一台目のLINUX上でプログラムを実行しLANでつながれたもう1台のLINUXにあるシェルスクリプトを実行するにはC言語でどのようにプログラミングをすれば可能でしょうか? プログラムと同じ場所ならsystem(コマンド)で出来るんですよね? telnetとか使いますか?それとももっと単純に出来るのでしょうか?

  • visual c++環境でのコンソールアプリ実行について。

    visual c++の開発環境を使ってC言語の勉強をしようと思っています。 下記のような手順でデバッグを実行しようと思っているのですが、上手くいかずこまっています。 1 Sample.cを、あらかじめ、/Visual C++ 2005/Projects/Sample/Sample.cのように格納しておく。 2 統合開発環境で、「ファイル」→「新規作成」→「既存のコードからプロジェクトを作成」を選択する。 3 既存のコードからプロジェクトを作成ウインドウが開き、「作成するプロジェクトの種類を入力してください」が「Visual C++」になっているので、そのまま「次へ」をクリックする。 4 プロジェクトの場所とソースファイルの指定ウインドウで、「参照」ボタンを利用して、「プロジェクトファイルの場所」欄に、「・・・/Projects/Sample」と入れ、「プロジェクト名」欄に「Sample」と入力する。「次のフォルダからプロジェクトにファイルを追加します」のチェックをそのままにして、「次へ」をクリックする。 5 プロジェクト設定の指定ウインドウで、「プロジェクトのビルド方法」の「Visual C++を使用する」のチェックをそのままにし、「プロジェクトの種類」を「コンソールアプリケーション」にする。それ以降にはチェックを付けないで、「完了」をクリックする。 6 統合開発環境の「ソリューションエクスプローラ」部から「Sample.c」を選んでダブル・クリックすると、コードが表示される。 7 これでデバッグするとコンソール(Visual c++のDOS窓)が一瞬表示され消えてしまいます。 間違っている所やこのようにしたらなど、意見よろしくお願い時ます。

専門家に質問してみよう