如何让 Jupyter Terminal 功能齐全?

How to make Jupyter Terminal fully functional?

Jupyter Lab 应用程序具有很好的 Terminas 浏览器终端 shell 功能,支持颜色、导航键和终端应用程序的几乎所有标准功能。在这个问题中,我指的是 /lab 应用程序,而不是经典笔记本 (/tree) 应用程序。

如果我使用 this Docker 图像启动 Jupyter 服务器,效果很好。我需要建立自己的形象,最好不要以此为基础。我只是按照记录的那样做:

docker run -it --rm -p 8888:8888 -v "$PWD":/jupyter python:3.8 bash
# pip install jupyterlab
# jupyter lab --config=/jupyter/jupyter_notebook_config.py

以上假设我在当前目录中有一个jupyter_notebook_config.py

c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.port = 8888
c.NotebookApp.password = 'sha1:<salt>:<hash>'
c.NotebookApp.allow_password_change = False
c.NotebookApp.allow_root = True
c.NotebookApp.open_browser = False

一切正常,但终端性能很差,它不支持颜色和发送代码(如 ^[[A^[[B)而不是方向键。 Dockerfile 的逐行调查并不是那么令人兴奋的努力,也许有人可以指出我在想什么?

编辑:我对颜色有点不对(被jupyter/base-notebook图像中的默认绿色提示弄糊涂了)和整体问题描述。根本原因是我的镜像启动的shell是sh,而官方镜像是bash。但是尽管如此,Terminal 还没有完全发挥作用,例如如果我启动 nano,它只会从 80x25 字符区域开始,不会拉伸到终端的实际大小)。虽然箭头在纳米中工作。

所以我想通了原因。显然,Terminal web 应用程序只是复制了用户默认 shell 的行为,而 Jupyter 是 运行。在此图像中,他们在 .bashrc 模板中启用着色,然后创建一个新用户,为他指定 shell(第 52 and 59 行)。

编辑: 还必须在环境中设置 SHELL=/bin/bash