当用户提供HOST命令时,SQLPLUS如何知道要调用哪个程序(在MS Windows上)?
(我希望用更严格的内容替换cmd.exe,但不要破坏现有的MSWindows安装)
答案 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版本。