我正在自定义我的PowerShell提示,我希望它在当前会话通过SSH时显示一个特殊的图标。
具体来说,我希望我的提示指示器有一架小飞机:
c:foo> # connected to my local machine
c:foo>ssh remote
#...
c:bar✈> # connected to remote!
我在本地和远程机器之间使用相同的提示。
如何检测给定会话是远程/通过SSH的?
免责声明:我在微软工作
我没有任何远程连接的通用解决方案,但如果您有远程SSH会话,则会设置SSH_CLIENT
和SSH_CONNECTION
环境变量:
>dir env:*ssh*
Name Value
---- -----
SSH_CONNECTION [redacted]
SSH_CLIENT [redacted]
因此,您可以在提示中测试该变量的存在性!
function Test-IsRemote {
[CmdletBinding()]
param()
return Test-Path env:SSH_CLIENT;
}
# ... in your prompt:
if (Test-IsRemote) {
Microsoft.PowerShell.UtilityWrite-Host "✈ " -NoNewLine -ForegroundColor "DarkGray"
}
# ...
Microsoft.PowerShell.UtilityWrite-Host ">" -NoNewLine -ForegroundColor "DarkGray"
这在定制ZSH提示的指南中有参考:
注意:当您经常有多个终端窗口对不同的主机打开时,提示中的主机名是有用的。这是真的,但是提示是由远程shell及其在远程主机上的配置文件定义的。在配置文件中,您可以测试是否设置了
SSH_CLIENT
变量,并为远程会话显示不同的提示。在远程shell会话中有更多显示主机的方法,例如在终端窗口标题栏中或使用不同的窗口背景色。