C#コアアプリケーションから ".sh"ファイルを実行しようとしていますが、正しく実行されていないようです。シェルスクリプトファイル(.sh)がLinuxのC#コアから実行されない
私はLinux環境でホストされている.Netコアプロジェクトに取り組んでいます。私たちは "Apache FOP"を使ったプロジェクトで "PDF"を作成しようとしています。 私は内部的に "fop"を必要なパラメータで呼び出す1つの "シェルスクリプト"ファイル "transform.sh"を作成しました。開発はWindowsマシン上で行われているので、同じusinf "バッチ"ファイルすなわち "transform.bat"我々は、Linux環境の「バッチ」ファイルを使用することはできませんので、私たちは、シェルスクリプトファイル「transform.sh」
後は、以下の「transform.sh」
./fop -xml $1 -xsl $2 -pdf $3
からのコードでC#コードからされて作成されました"シェルスクリプトファイル"と呼んでいます。
var process = new Process
{
StartInfo = new ProcessStartInfo
{
UseShellExecute = false,
RedirectStandardOutput = true,
Arguments = string.Format("{0} {1} {2}", XML_filename, XSL_filename, output)
}
};
process.StartInfo.FileName = "Path to shell script file";
process.Start();
process.WaitForExit();
上記のコードではエラーはありませんが、pdfファイルは作成されません。「Terminal」からシェルスクリプトファイルを直接実行すると、正常に動作し、pdfファイルが作成されます。
./transform.sh "/home/ubuntu/psa//PdfGeneration/ApacheFolder/XMLFolder/test.xml" "/home/ubuntu/psa/PdfGeneration/ApacheFolder/XSLTFolder/Certificate.xsl" "/home/ubuntu/psa/PdfGeneration/ApacheFolder/PDFFolder/t444t.pdf"
私は間違って何かがある場合、私はsheelスクリプトはC#のコアアプリケーションを介してLinux上で実行することができますどのように?やって教えてください。おかげさまで
があなたに送信された引数にスペースはあります(変更FOPファイルのフルパスを与えること)でしたbashスクリプト?どちらの方法でも、引数の文字列は実際には各引数の周りに引用符を付ける必要があります。 [二重引用符をエスケープするための最後の例をここで確認してください](https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments(v = vs.110).aspx?cs-save- lang = 1&cs-lang = csharp#code-snippet-2)。 bashスクリプトはまったく実行されますか?スクリプト内で 'touch \ some \ file'を実行して、実行しているかどうかを確認することもできます。 – JNevill
はい各引数の間にスペースがあります –
引数内のスペースを意味します。 '/ home/ubuntu/my folder/myfile.xml'と似ています。linuxのシェルスクリプトに引数を渡すときは、これらの引数を引用符で囲み、複数の引数に分割しないようにすることが重要です。おそらく、スクリプトから何が出てくるのかを見るには、スクリプトを 'echo $ 1" "$ 2" "$ 3">/home/ubuntu/scripttest.txtに変更してください。その後、スクリプトを実行するプログラムを実行し、そのファイルに何が蹴られているかを確認します。 – JNevill