我一直在玩OpenSSH on Windows,看起来普通的Unix别名都缺失了。当我通过SSH登录到Windows机器时,我不确定它是启动PowerShell还是cmd。在Windows上查看当前正在运行的shell的正确方法是什么?
答案 0 :(得分:7)
所有功劳都归PetSerAl所有,必须以aswer发布:
(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell
在Win32-OpenSSH
范围内,此命令也有效,并输出CMD
。
注意:Win32-OpenSSH
似乎有点受限,我的系统无法识别cd
。
答案 1 :(得分:1)
我想扩展@sodawillow的答案,以区分使用称为Desktop
的 Powershell ( powershell.exe )和 PWSH ( pwsh.exe ),称为Core
。
(dir 2>&1 *`|echo CMD);&<# rem #>echo ($PSVersionTable).PSEdition
# Returns one of: CMD, Core, Desktop
这在未实例化未的所有情况下都有效。这意味着从Python中打开默认子进程后不起作用,因为它在与Windows交互时始终使用 CMD 。这实际上是由Windows环境变量设置的:ComSpec
始终指向C:\Windows\system32\cmd.exe
。
例如:
(从pwsh shell启动python解释器。)
>>> import os, subprocess
>>> c="(dir 2>&1 *`|echo CMD);&<# rem #>echo($PSVersionTable).PSEdition"
>>> subprocess.call(c,shell=True)
CMD
有关其他Python shell检测方案,请参见this good post。
更新:2020-05-01
我设法完成了上述工作,但是在执行之前,总是总是加载powershell profile 的令人讨厌的副作用。诀窍是这样指定execute=<path-to-powershell-exe>
:
(启动python CLI。)
import os, subprocess
c="(dir 2>&1 *`|echo CMD);&<# rem #>echo($PSVersionTable).PSEdition"
e="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
subprocess.call(c, shell=True, executable=e)
# output:
# <blah blah from profile>
# Desktop
# 0
我无法规避Powershell配置文件问题。但是apparently仍在努力。请参阅here和here。