Я играл с OpenSSH в Windows, и похоже, что обычные псевдонимы Unix отсутствуют. Я не уверен, запускает ли он powershell или cmd, когда я вхожу в систему Windows через SSH. Как правильно увидеть текущую запущенную оболочку в Windows?
Как определить, нахожусь ли я в powershell или cmd?
Ответы (2)
Все заслуги принадлежат PetSerAl, это должно было быть опубликовано как ответ:
(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell
Внутри Win32-OpenSSH
эта команда также работает и выводит CMD
.
NB: Win32-OpenSSH
кажется немного ограниченным, cd
не распознается в моей системе.
$PROFILE
или ls
- person Rajan; 21.04.2021
Я хотел бы расширить ответ @sodawillow, чтобы также различать использование Powershell (powershell.exe), известного как Desktop
, и PWSH (pwsh.exe), известный как Core
.
(dir 2>&1 *`|echo CMD);&<# rem #>echo ($PSVersionTable).PSEdition
# Returns one of: CMD, Core, Desktop
Это работает во всех случаях, когда вложенная оболочка не создается. Это означает, что он не работает при открытии подпроцесса по умолчанию в Python, поскольку он всегда использует CMD при взаимодействии с окнами. На самом деле это устанавливается переменной среды Windows: ComSpec
всегда указывает на C:\Windows\system32\cmd.exe
.
Например:
(Запуск интерпретатора Python из оболочки pwsh.)
>>> import os, subprocess
>>> c="(dir 2>&1 *`|echo CMD);&<# rem #>echo($PSVersionTable).PSEdition"
>>> subprocess.call(c,shell=True)
CMD
Другие схемы обнаружения оболочки Python см. в этой полезной публикации.
ОБНОВЛЕНИЕ: 01.05.2020
Мне удалось заставить вышеприведенное работать, но с неприятным побочным эффектом всегда загружать профиль powershell перед выполнением. Хитрость заключалась в том, чтобы указать execute=<path-to-powershell-exe>
следующим образом:
(Запустите интерфейс командной строки Python.)
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. Но очевидно над этим что-то работает. См. здесь и здесь.
0
.
- person not2qubit; 01.05.2020
dir
для вызова команды dir cmd.exe (что делает мой профиль). Но тем не менее это довольно умно. - person Χpẘ   schedule 27.12.2015type
илиecho
:(type 2>&1 -ea ig .|echo CMD);&<# rem #>echo PowerShell
- person user4003407   schedule 27.12.2015