Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBS(Windows)在当前shell中打开可执行文件_Windows_Shell_Vbscript_Octave_Gnu - Fatal编程技术网

使用VBS(Windows)在当前shell中打开可执行文件

使用VBS(Windows)在当前shell中打开可执行文件,windows,shell,vbscript,octave,gnu,Windows,Shell,Vbscript,Octave,Gnu,我一直在搜索2005年之前的各种论坛,试图找到如何使用VBS在当前shell中运行基于shell的应用程序。也就是说,我打开了一个终端,想要执行这个应用程序(输入一个REPL)并使用我所在的终端使用它——相反,一个新的命令提示符正在打开,这违背了我关于这个应用程序的无gui(纯)REPL版本的想法。此应用程序是GNU倍频程 对于Windows安装,他们有一个VBS脚本(基于CLI参数),可以打开Octave Dev环境,也可以只打开Octave REPL(使用--无gui)。他们通过一个VBS脚

我一直在搜索2005年之前的各种论坛,试图找到如何使用VBS在当前shell中运行基于shell的应用程序。也就是说,我打开了一个终端,想要执行这个应用程序(输入一个REPL)并使用我所在的终端使用它——相反,一个新的命令提示符正在打开,这违背了我关于这个应用程序的无gui(纯)REPL版本的想法。此应用程序是GNU倍频程

对于Windows安装,他们有一个VBS脚本(基于CLI参数),可以打开Octave Dev环境,也可以只打开Octave REPL(使用
--无gui
)。他们通过一个VBS脚本(见下文)来实现这一点,所以我想,也许我可以修改它,让它在当前shell中打开Octave REPL。事实证明这并不像我想的那么容易。。。我发现我的问题的罪魁祸首是
wshShell.Run
命令,但显然它只能在后台运行命令,或者作为一个新的进程—很明显,我希望在当前进程中运行我的应用程序

我想对于一个简单的问题来说,这是很多序言:我(minorly)如何修改下面的文件以交互方式打开Octave REPL,同时保持它设置的所有环境变量和其他设置?


在gui/命令模式下运行倍频程的脚本 设置wshShell=CreateObject(“WScript.Shell”) '获取脚本所在的目录 设置fso=CreateObject(“Scripting.FileSystemObject”) OctavePath=fso.GetParentFolderName(WScript.ScriptFullName) 'ctavePath现在是安装文件夹的根目录,但对于msys2, 'OctavePath应为OctavePath/mingw64或OctavePath/ming32 MSysType=“MSYS” MSysPath=OctavePath 设置objFSO=CreateObject(“Scripting.FileSystemObject”) 如果存在objFSO.files(OctavePath&“\mingw64\bin\octave cli.exe”),则 MSysPath=OctavePath&“\usr” MSysType=“MINGW64” OctavePath=OctavePath&“\mingw64” ElseIf objFSO.FileExists(OctavePath&“\mingw32\bin\octave cli.exe”),然后 MSysPath=OctavePath&“\usr” MSysType=“MINGW32” OctavePath=OctavePath&“\mingw32” 如果结束 '将路径设置为8.3路径 Set fo=fso.GetFolder(OctavePath) OctavePath=fo.ShortPath Set fo=无 '设置路径以确保倍频程音箱优先 设置wshSystemEnv=wshShell.Environment(“进程”) 如果OctavePath MSysPath,则 wshSystemEnv(“路径”)=MSysPath&“\bin;”&wshSystemEnv(“路径”) 如果结束 wshSystemEnv(“路径”)=八维路径&“\bin;”和wshSystemEnv(“路径”) wshSystemEnv(“MSSystem”)=MSysType '设置终端类型 wshSystemEnv(“术语”)=“cygwin” wshSystemEnv(“GNUTERM”)=“wxt” wshSystemEnv(“GS”)=“GS.exe” 如果wshShell.ExpandEnvironmentStrings(“%HOME%”)=“%HOME%”,则 Home=wshSystemEnv(“用户配置文件”) Set fo=fso.GetFolder(主目录) wshSystemEnv(“主”)=fo.ShortPath Set fo=无 如果结束 '设置Qt插件目录和路径 如果objFSO.FolderExists(OctavePath&“\qt5\bin”),则 wshSystemEnv(“路径”)=八维路径&“\qt5\bin;”和wshSystemEnv(“路径”) wshSystemEnv(“QT\U插件\U路径”)=OctavePath&“\qt5\plugins” 其他的 wshSystemEnv(“QT\u PLUGIN\u PATH”)=OctavePath&“\plugins” 如果结束 '检查参数,查看是否被告知运行gui或命令行 '并生成要使用的其他参数 GUI_模式=1 AllArgs=“” 设置wshArgs=WScript.Arguments 对于I=0到wshArgs.Count-1 如果wshArgs(I)=“无gui”,则gui_模式=0 AllArgs=AllArgs&chr(34)&wshArgs(I)&chr(34) 下一个 '启动倍频程gui,显示或隐藏控制台 如果GUI_模式=1,则 AllArgs=AllArgs&“chr(34)”和“--gui”和chr(34) wshShell.runchr(34)&OctavePath&“\bin\octave gui.exe”&chr(34)&AllArgs,0 其他的 运行chr(34)&OctavePath&“\bin\octave gui.exe”&chr(34)&AllArgs,1 如果结束 "解放我们的目标", 设置fso=无 设置wshShell=Nothing 设置wshSystemEnv=Nothing 设置wshArgs=无
要连接到现有控制台,必须由连接到该控制台的程序启动控制台程序

对于由GUI程序启动的程序

  • 如果一个控制台程序将被赋予一个新的控制台

  • 如果GUI程序没有控制台,它可以使用
    AttachConsole
    API调用来连接到任何控制台


  • VBScript无法调用API调用。

    将我的评论转换为答案,尽管我仍然有点困惑您真正想要的是什么,但希望在下面介绍一下

    值得一提的是,我的理解是vbs脚本基本上是实际倍频程二进制文件的包装器,应该安装在倍频程根目录的bin文件夹中。因此,启动repl应该非常简单,只需将该目录放在路径中,然后在控制台中键入octave即可

    我不知道windows二进制文件是否有更多区别,但在linux二进制文件中,您有octave和octave cli,后者:

    octave cli在编译时没有任何GUI支持(Qt),这使得它比默认的octave可执行文件小,但也限制了它仅提供命令行界面(cli)

    一个关键的区别是,正如您所说,它缺少qt库。如果您尝试在cli环境中绘图,仍然会得到图形窗口,但它们将使用fltk或gnuplot环境而不是qt

    但除此之外,您可以完全使用支持qt的正常
    倍频程
    可执行文件,并在REPL(即
    --无gui
    )模式下使用它,而不是使用完整的gui。事实上,至少在linux中,就我所知,这是默认行为;您需要显式地传递
    --gui
    选项来启动实际的gui。也许开发人员觉得windows用户可能会感到困惑,因此他们改变了这种行为,创建了
    octave gui
    octave
    可执行文件,后者基本上是精简的cli版本;我不知道。如果是这样的话,我想你可以