programing

내가 파워셸인지 cmd인지 어떻게 판단합니까?

telecom 2023. 10. 27. 21:44
반응형

내가 파워셸인지 cmd인지 어떻게 판단합니까?

Windows에서 OpenSSH를 사용하고 있는데 일반적인 Unix 별칭이 없어진 것 같습니다.SSH를 통해 Windows 컴퓨터에 로그인할 때 powershell이 시작되는지 cmd가 시작되는지 확신할 수 없습니다.Windows에서 현재 실행 중인 셸을 확인하는 올바른 방법은 무엇입니까?

모든 크레딧은 PetSerAl에게 제공되며, 이는 답변으로 게시되어야 했습니다.

(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell

이내에Win32-OpenSSH이 명령은 또한 작동하고 출력합니다.CMD.

NB:Win32-OpenSSH좀 제한적인 것 같은데요cd내 시스템에서 인식되지 않습니다.

powershell(powershell.exe)을 사용하는 것도 구별하기 위해 @sodawillow의 답변을 확장하고자 합니다.DesktopPWSH(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.

예를 들어,

(pwsh 셸에서 python 인터프리터 시작)

>>> import os, subprocess
>>> c="(dir 2>&1 *`|echo CMD);&<# rem #>echo($PSVersionTable).PSEdition"
>>> subprocess.call(c,shell=True)
CMD

다른 Python shell detection scheme에 대해서는 이 좋은 게시물을 참고하시기 바랍니다.


업데이트 : 2020-05-01

저는 그럭저럭 위의 작업을 할 수 있었지만, 실행하기 전에 항상 파워셸 프로파일을 로드하는 불쾌한 부작용이 있었습니다.그 비결은 다음과 같이 명시하는 것이었습니다.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

파워셸 프로필 문제를 피하지 못했습니다.하지만 분명히 그것은 작업중인 것입니다.여기여기서 보세요.

언급URL : https://stackoverflow.com/questions/34471956/how-to-determine-if-im-in-powershell-or-cmd

반응형