从mac执行Shell脚本

问题描述:

我在这里处理NativeProcess,特别是使用mac os中的命令。所以,我在与我的应用程序相同的目录中有一个.sh文件。通过这个shell脚本,我试图执行.jarfile(同样的目录)。不知何故,我做了一些错误,那为什么它不起作用。从mac执行Shell脚本

我的代码是未来

<?xml version="1.0" encoding="utf-8"?> 
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx" 
          creationComplete="init()"> 
     <fx:Declarations> 
      <!-- Place non-visual elements (e.g., services, value objects) here --> 
     </fx:Declarations> 
     <fx:Script> 
      <![CDATA[ 
       import mx.controls.Alert; 
       var process:NativeProcess; 
       private function init():void 
       { 
        if (NativeProcess.isSupported) 
        { 
         Alert.show("suport native process."); 
          setupAndLaunch(); 
        } 
       } 
       private function setupAndLaunch():void 
       { 
       var cmdFile:File = File.applicationDirectory.resolvePath("InvokeJar.sh"); 
       Alert.show(cmdFile.nativePath,".Sh File Path"); 
       var processArgs:Vector.<String> = new Vector.<String>; 
       processArgs.push('chmod -x "'+cmdFile.nativePath+'"'); 

        var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
       nativeProcessStartupInfo.arguments = processArgs; 
       nativeProcessStartupInfo.executable = cmdFile; 
       nativeProcessStartupInfo.workingDirectory = File.applicationDirectory; 

        process = new NativeProcess(); 
        process.start(nativeProcessStartupInfo); 
        process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
        process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); 
        process.addEventListener(NativeProcessExitEvent.EXIT, onExit); 
        process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); 
        process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); 
       } 

       public function onOutputData(event:ProgressEvent):void 
       { 
        trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); 
       } 

       public function onErrorData(event:ProgressEvent):void 
       { 
        trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
       } 

       public function onExit(event:NativeProcessExitEvent):void 
       { 
        trace("Process exited with ", event.exitCode); 
       } 

       public function onIOError(event:IOErrorEvent):void 
       { 
        trace(event.toString()); 
       } 
      ]]> 
     </fx:Script> 
    </s:WindowedApplication> 

下一个是shell脚本的一部分

java -jar Test.jar 

,当我在Mac系统上测试该应用程序,应用程序显示警告对话框(视.SH文件路径),但没有其他事情发生。

当使用NativeProcesses时,没有太多东西需要解决。如果您发现任何更奇怪或错误的东西,请告诉我。

谢谢

您是否尝试过这里,是否收到任何错误? http://forums.adobe.com/thread/721724

这里是代码工作正常

<?xml version="1.0" encoding="utf-8"?> 
     <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           creationComplete="init()"> 
      <fx:Declarations> 
       <!-- Place non-visual elements (e.g., services, value objects) here --> 
      </fx:Declarations> 
      <fx:Script> 
       <![CDATA[ 
        import mx.controls.Alert; 
        var process:NativeProcess; 
        private function init():void 
        { 
         if (NativeProcess.isSupported) 
         { 
          Alert.show("suport native process."); 
           setupAndLaunch(); 
         } 
        } 
        private function setupAndLaunch():void 
        { 
        var shFilePath:String= File.applicationDirectory.resolvePath('invokeJAR.sh').nativePath; 
         Alert.show(shFilePath,".Sh File Path"); 
         var cmdFile:File=new File('/bin/bash'); 
         var processArgs:Vector.<String>= new Vector.<String>; 
         processArgs.push('-c');   
         processArgs.push('bash invokeJAR.sh'); 
         var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
        nativeProcessStartupInfo.arguments = processArgs; 
        nativeProcessStartupInfo.executable = cmdFile; 
        nativeProcessStartupInfo.workingDirectory = File.applicationDirectory; 

         process = new NativeProcess(); 
         process.start(nativeProcessStartupInfo); 
         process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
         process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); 
         process.addEventListener(NativeProcessExitEvent.EXIT, onExit); 
         process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); 
         process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); 
       try 
       { 
        process.start(nativeProcessStartupInfo); 
       } 
       catch(e:Error) 
       { 
        Alert.show(e.message,"startup Error"); 
       } 
        } 

        public function onOutputData(event:ProgressEvent):void 
        { 
         trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); 
        } 

        public function onErrorData(event:ProgressEvent):void 
        { 
         trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
        } 

        public function onExit(event:NativeProcessExitEvent):void 
        { 
         trace("Process exited with ", event.exitCode); 
        } 

        public function onIOError(event:IOErrorEvent):void 
        { 
         trace(event.toString()); 
        } 
       ]]> 
      </fx:Script> 
     </s:WindowedApplication>