终端默认是sh,想换成bash需修改c.serverapp.terminado_settings为{'shell_command': ['/bin/bash']},并确保配置文件被正确加载、docker中已安装bash,且重启jupyter后新开终端标签页生效。

终端默认是 sh,想换成 bash 怎么改
直接改 jupyter_notebook_config.py 或 jupyter_lab_config.py 里的 c.ServerApp.terminado_settings 即可。这个配置控制 Jupyter 启动终端时调用的 shell 程序,不是改系统默认 shell,也不影响 notebook 里 !xxx 命令的执行环境。
实操步骤:
- 先确保配置文件存在:运行
jupyter notebook --generate-config或jupyter lab --generate-config - 打开生成的配置文件(路径类似
C:UsersXXX.jupyterjupyter_notebook_config.py或~/.jupyter/jupyter_lab_config.py) - 添加或修改这一行:
c.ServerApp.terminado_settings = {'shell_command': ['/bin/bash']} - Windows 用户请写成
c.ServerApp.terminado_settings = {'shell_command': ['C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe']}或['C:/Program Files/Git/bin/bash.exe'](取决于你实际安装路径) - 保存后重启 Jupyter(必须完全退出再启动,只刷新页面无效)
为什么改了配置还是启动 sh?
常见原因不是配置写错,而是配置文件没被加载,或被多个配置覆盖。Jupyter 会按顺序读取多个配置位置,优先级从高到低:
- 当前工作目录下的
jupyter_notebook_config.py -
~/.jupyter/下的配置文件 - conda 环境专属路径(如
envs/myenv/etc/jupyter/jupyter_notebook_config.py)
如果你在 conda 环境里启动 Jupyter,它很可能读的是环境级配置,而不是用户主目录下的那个。可以用 jupyter --paths 查看实际生效的配置路径。
另一个坑:Docker 容器里没装 bash,只装了 sh。这时即使配置写了 /bin/bash,也会 fallback 到 sh,且无提示。检查方法是在容器里执行 which bash。
notebook 里 !pip install xxx 报 OSError: "/bin/bach" shell not found
这不是终端配置问题,而是 kernel 层面缺失 SHELL 环境变量。错误里 /bin/bach 是拼写错误(应为 bash),但根源是 ipykernel 启动时没设 env.SHELL,导致 ! 命令找不到可用 shell。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
解决方式是改 kernel 对应的 kernel.json:
- 找到对应环境的 kernel 文件,路径类似:
~/anaconda3/envs/myenv/share/jupyter/kernels/python3/kernel.json - 在
{"argv": [...], "display_name": "...", ...}对象里加一行:"env": {"SHELL": "/bin/sh"}(Linux/macOS)或"env": {"SHELL": "C:\Windows\System32\cmd.exe"}(Windows) - 注意 JSON 格式要合法:逗号不能多也不能少,字符串用双引号
- 改完保存,然后运行
jupyter kernelspec list确认 kernel 名称,再执行jupyter kernelspec install --user /path/to/your/kernel(如果手动改过 kernel 目录)
Windows 上 PowerShell 7 想当默认终端怎么办
PowerShell 7 默认不注册为系统默认 shell,Jupyter 找不到它。不能只写 powershell.exe,得用完整路径。
典型路径:
- PowerShell 7 安装后通常在:
C:Program FilesPowerShellpwsh.exe - 确认是否存在:在 CMD 里运行
where pwsh - 配置写法:
c.ServerApp.terminado_settings = {'shell_command': ['C:/Program Files/PowerShell/7/pwsh.exe']}(用正斜杠更安全) - 如果路径含空格又不想用正斜杠,就用双反斜杠:
'C:\Program Files\PowerShell\7\pwsh.exe'
注意:PowerShell 7 的 profile 可能不会自动加载,首次启动时看不到你自定义的 alias 或 module。需要在 pwsh.exe 启动参数里加 -NoExit -Command "..." 才能补救,但 terminado 不支持传参,所以更稳妥的做法是把初始化逻辑写进 $PROFILE。
真正容易被忽略的一点:改完配置后,旧的终端标签页不会自动切换 shell,必须新开一个 Terminal 标签页才生效。已打开的终端进程不会 reload 配置。










