跳转至

终端环境与配置

一、这页讲什么

终端环境配好之后,从文档里复制过来的命令可以直接粘贴执行,报错信息不是乱码,关掉窗口也不会杀掉正在跑的任务。这页按「先定 Shell → 再配宿主 → 配提示符 → 会话保活」的顺序做完,最后用一份检查清单确认。

读完能做成三件事:新机器半小时内配到可用;判断一条报错是编码、换行还是 Shell 语法问题;把长任务放进会话里,断开后还能接回来。

二、开始之前

项 内容
更新日期 2026-10-21
适用版本 Windows 11 + PowerShell 7.4;Ubuntu 24.04
预计耗时 30 分钟
风险级别 低。只改本机配置文件,不改系统服务
前置 会用 cd、ls、cat 这类基本命令;有本机管理员权限

三条约定:修改前先备份原文件(Copy-Item x x.bak);一次只改一项,改完验证;配置文件放在版本库里,换机器直接复用。

三、动手做

3.1 定默认 Shell

Windows 自带的是 Windows PowerShell 5.1,语法与新版有差异(管道、编码、&& 支持都不同)。统一装 PowerShell 7,并把 PowerShell 7 设为终端默认。

# 安装 PowerShell 7(用户级,不动系统自带版本)
$ winget install --id Microsoft.PowerShell -e
# 查版本,确认主版本号是 7
$ pwsh -v
PowerShell 7.6.1

看到 PowerShell 7.x 的版本号就算成。

Linux 侧不需要换 Shell,Ubuntu 默认 bash 即可,后文按 bash 写。

3.2 装 Windows 终端与字体

Windows 终端是承载窗口的宿主,负责渲染、分屏、标签页;Shell 跑在终端窗口里。两者分开升级,配置也分开。

$ winget install --id Microsoft.WindowsTerminal -e
Successfully installed
$ winget install --id DEVCOM.JetBrainsMonoNerdFont -e
Successfully installed

看到「已成功安装」并且开始菜单出现「终端」就算成。

字体装带 Nerd Font 的版本,提示符上的图标靠字体渲染。普通字体也能用,只是图标位置会显示成方块。

3.3 写 PowerShell 配置文件

$PROFILE 是每次启动自动执行的脚本路径。先看路径,再建文件,然后加别名与提示符。

$ $PROFILE
C:\Users\<用户名>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
$ if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
$ echo $PROFILE | Get-Content   # 确认文件已建出来

看到路径打印出来、文件存在就算成。

配置文件里放三类内容:常用别名、提示符初始化、只在交互式终端生效的设置。

# 别名:短命令指向常用参数
Set-Alias ll Get-ChildItem
function gs { git status --short }
# 提示符(需要先装 oh-my-posh)
oh-my-posh init pwsh | Invoke-Expression

改完重开一个终端窗口,ll 能列出目录就算成。

3.4 Linux 侧:别名与提示符

bash 的对应文件是 ~/.bashrc,fish 是 ~/.config/fish/config.fish。两边的语法不通用,别名写法一样,函数写法不同。

# 追加两条别名,先备份再改
$ cp ~/.bashrc ~/.bashrc.bak
$ echo "alias ll='ls -alF'" >> ~/.bashrc
$ source ~/.bashrc && ll
total 24
drwxr-xr-x 5 demo demo 4096 Oct 21 10:10 .

列出带权限与时间的目录内容就算成。

3.5 会话管理

直接开窗口跑长任务,断开连接任务就没了。tmux 让 shell 进程挂在一个会话里,断开后重连接回来。

$ tmux new -s work            # 新建名为 work 的会话
$ tmux ls                     # 另开窗口看会话列表
work: 1 windows (created Tue Oct 21 10:12:04 2026)
$ tmux attach -t work         # 接回会话

Ctrl+B 再按 D 是分离,会话继续在后台跑;tmux ls 能看到会话就算成。

四、做完怎么确认

检查项 期望结果
pwsh -v 输出 PowerShell 7.x
新开终端窗口 提示符带图标,无方块字
ll 列出目录内容,不是「找不到命令」
tmux ls 能看到刚才建的会话
断开 SSH 后重连,tmux attach -t work 回到原会话,历史输出还在

五项都过,环境可用。

五、卡住了怎么排查

症状 多半是 怎么办
中文显示成方块 字体不含中文字形 换含中文的等宽字体,或单独设置 face
图标显示成方块 字体不是 Nerd Font 装 Nerd Font 版本
\r 或 bad interpreter: ^M 文件是 CRLF 换行 dos2unix 文件名,或 sed -i 's/\r$//' 文件名
粘贴多行命令只执行了第一行 终端把换行当执行 用 bracketed paste,或先粘到编辑器再执行
挂载目录里操作特别慢 WSL 跨文件系统访问 项目文件放进 WSL 内部目录,别放 /mnt/c
fish 里报语法错误 命令按 bash 写法写 换 bash,或按 fish 语法改写
启动终端明显变慢 配置文件里执行了重活 把耗时命令移出 $PROFILE,按需手动跑
SSH 连上后卡住不动 会话初始化脚本阻塞 先 ssh -T 测试,逐步排查 profile 内容

症状表覆盖不到时,先确认三件事:当前 Shell 是哪个($PSVersionTable 或 echo $SHELL)、配置文件路径对不对、报错原文是什么。报错原文比任何猜测都准。

六、为什么这样能成

终端里的文字走一条固定链路:宿主窗口把按键交给 Shell,Shell 执行程序,程序把输出按字节流交给宿主渲染。中文乱码是编码不一致(UTF-8 与 GBK 互认),^M 是 Windows 换行符多出来的回车,图标是字体缺字形。

ANSI 转义序列负责颜色与光标控制,宿主负责解析,所以「换个终端颜色就不对」通常是宿主没开对应的转义支持。tmux 能保活是因为 tmux 把自己做成父进程,Shell 挂在会话下,SSH 断开只杀掉终端连接,不杀会话。

七、边界与替代

这页只管本机终端环境。以下情况别按这页做:

  • 服务器上只跑一次的命令:临时用系统自带 Shell,不必配环境。
  • 团队统一镜像或受组策略管控的机器:先确认能不能改配置文件,改不动就走镜像内置方案。
  • 需要图形界面的操作:终端不是合适入口,用各自的客户端。

替代方案:不想装额外字体就接受图标缺失;不需要保活就用 nohup;只是看文件差异用编辑器自带的终端,不必单独配。

八、官方资料