在MSWindows上通过SQLPLUS.exe HOST命令调用Shell

时间:2017-11-16 15:20:58

标签: oracle cmd

当用户提供HOST命令时,SQLPLUS如何知道要调用哪个程序(在MS Windows上)?

(我希望用更严格的内容替换cmd.exe,但不要破坏现有的MSWindows安装)

1 个答案:

答案 0 :(得分:1)

识别SQL * Plus的Shell

要识别SQL * Plus在调用HOST命令时将使用的shell,它会声明设置环境变量SHELL。这是12c documentation

我的回答将集中在将shell更改为powershell。

在带有Powershell 5.1的Windows 7上,我可以调用此命令为我的笔记本电脑系统地设置我的环境变量SHELL

[Environment]::SetEnvironmentVariable("SHELL", "powershell.exe" , "Machine")

接下来,我启动一个SQL * Plus会话,然后调用主机命令host %shell% get-host。这是我执行此命令。

SCOTT@db>host %shell% get-host                                                           


Name             : ConsoleHost                                                               
Version          : 5.1.14409.1012                                                            
InstanceId       : b2585ba7-ea5f-452f-ba4f-d3dfc3032890                                      
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface      
CurrentCulture   : en-US                                                                     
CurrentUICulture : en-US                                                                     
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy                        
DebuggerEnabled  : True                                                                      
IsRunspacePushed : False                                                                     
Runspace         : System.Management.Automation.Runspaces.LocalRunspace                      

直观地说,人们会期望调用host后跟一个shell命令(例如在我的情况下是一个powershell命令),但这会失败:

SCOTT@db>host get-host                                                                   
'get-host' is not recognized as an internal or external command,                             
operable program or batch file.                                                              

根据这些结果并删除了设置SHELL环境变量的需要,这与我的其他host调用类似:

SCOTT@db>host powershell get-host


Name             : ConsoleHost
Version          : 5.1.14409.1012
InstanceId       : 305716aa-30dc-4ef8-9184-0cfce94254e5
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

摘要

也许将环境变量SHELL标识为非默认shell可以在某些非Windows 7操作系统上运行,这种基于文档的设置并没有什么区别。

在SQL * Plus设置和更改环境变量之外,如果您正在考虑在Windows上更改一般的默认shell,我会看到以下选项:

- 更改群组政策(例如,请参阅此link

- 根据Microsoft Developer Network的指示修改相应的注册表项。此链接上有许多重要说明,您需要确保这些说明符合您正在使用的Windows版本。