在默认PowerShell的Windows Terminal中配置SSH+fzf命令别名
解决PowerShell中SSH+fzf别名自动执行的问题
问题原因
你之前用Set-Alias直接绑定命令表达式时,PowerShell会立即计算表达式的值,也就是启动终端时就执行ssh $(cat .ssh_known_hosts | fzf),导致fzf自动弹出。Set-Alias适合给已存在的命令/函数起别名,不能直接绑定需要延迟执行的命令逻辑。
正确配置方法
通过定义PowerShell函数来实现,函数只有在你主动调用时才会执行内部命令。
步骤1:编写函数
在$profile文件中添加以下函数(推荐用PowerShell原生的Get-Content替代cat,兼容性更好):
# 定义fzf_ssh函数 function fzf_ssh { ssh $(Get-Content .ssh_known_hosts | fzf) } # 定义fzf_ssh_tmux函数 function fzf_ssh_tmux { ssh $(Get-Content .ssh_known_hosts | fzf) -t tmux a }
如果.ssh_known_hosts不在当前工作目录,建议使用绝对路径避免找不到文件,比如:
Get-Content "$HOME\.ssh_known_hosts"
步骤2:保存并生效配置
- 打开
$profile文件:在PowerShell中执行notepad $profile,如果文件不存在,选择创建新文件。 - 将上述函数粘贴到文件中,保存退出。
- 重启Windows Terminal,或者在当前终端执行
. $profile让配置立即生效。
步骤3:使用别名
之后在PowerShell中直接输入fzf_ssh或fzf_ssh_tmux,就会触发fzf选择界面,选中目标后才会执行SSH命令,启动终端时不会自动执行。
内容的提问来源于stack exchange,提问作者Naveen Kedilaya
相关产品推荐
相关产品推荐

