0. 前言我们在做在线IDE的时候,会使用开源的 vscode 和 jupyterlab 这两种 IDE 。这两个 IDE 都自带一个 terminal,vscode 默认的 shell(ubuntu环境下)是 bash,jupyterlab terminal 自带的 shell 是 sh 。但是这两种 shell 其实都不太好用,尤其是 sh,属于古老的产物 。于是我们考虑将 zsh 配合 oh-my-zsh 作为 IDE terminal 的默认 shell 。
具体的需求就是:通过在线 IDE 打开一个 terminal 的时候,默认的 shell 是 zsh 。
为了实现这个需求,我们需要:
- 先新建一个基础镜像安装 zsh 和 oh-my-zsh 。
- 然后基于这个镜像,分别安装 vscode 和 jupyterlab,
- 最后分别配置对应的 zsh 环境 。

文章插图
- Dockerfile构建zsh
在dockerfile中安装zsh和oh-my-zsh:
RUN apt-get install -y zshRUN git clone https://github.com/robbyrussell/oh-my-zsh.git /opt/.oh-my-zshRUN echo $FIND_STR0 >> /opt/.oh-my-zsh/templates/zshrc.zsh-template \&& echo $FIND_STR1 >> /opt/.oh-my-zsh/templates/zshrc.zsh-template \&& sed -i '1i\ZSH_DISABLE_COMPFIX=true' /opt/.oh-my-zsh/templates/zshrc.zsh-template #ENTRYPOINT ["/start.sh"]说明- ZSH_DISABLE_COMPFIX=true: 被添加到 zshrc.zsh-template 是为了避免每次打开terminal的时候,出现:zsh compinit: insecure directories and files, run compaudit for list.
- zshrc.zsh-template: 会在start.sh中被重命名为.zshrc,拷贝到用户家目录下 。
- start.sh: 脚本和具体使用的IDE有关系,会在下面的章节具体展开 。
- 在线IDE配置
#!/bin/zsh/opt/code-server/bin/code-server /home/user --disable-telemetry --auth none --bind-addr 0.0.0.0:8080 --cert false &if [ ! -f "~/.zshrc" ];thensudo cp -r /opt/.oh-my-zsh ~sudo chown -R user:aide ~/.oh-my-zshcp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrcfiif [ ! -f "~/.bashrc" ];thentouch ~/.bashrcfiif [ `grep -c "zsh" ~/.bashrc` -eq '0' ];thenecho "zsh" >> ~/.bashrc # 这一步是为了保证启动terminal时,即使默认shell是bash,也可以自动切换到zshfitail -f /dev/null # 这一步是为了防止start.sh启动完成后,容器退出2.2 JupyterLabJupyterlab设置默认shell和vscode设置的方式有一定的区别 。- 首先需要通过命令 jupyter notebook --generate-config 在用户的家目录下生成 .jupyter/jupyter_notebook_config.py 配置文件 。
- 然后需要添加配置 c.NotebookApp.terminado_settings = {'shell_command': ['/bin/zsh']} 到~/.jupyter/jupyter_notebook_config.py 里 。
- 最后再启动 jupyterlab 应用 。
【如何在你的在线IDE中配置zsh作为默认shell?】
#!/bin/zshJUPYTERLAB_SHELL_COMMAND="c.NotebookApp.terminado_settings = {'shell_command': ['/bin/zsh']}"JUPYTERLAB_CONFIG="/home/user/.jupyter/jupyter_notebook_config.py"echo "init jupyterlab teminal to use zsh."if [ ! -f "$JUPYTERLAB_CONFIG" ];thenecho "There is no jupyter_notebook_config.py, create one."jupyter notebook --generate-configecho "jupyter_notebook_config.py is created successfully."echo $JUPYTERLAB_SHELL_COMMAND >> $JUPYTERLAB_CONFIGecho "set shell_command as /bin/zsh done."elseecho "jupyter_notebook_config.py is already existed. check shell_command = /bin/zsh or not."if [ `grep -c $JUPYTERLAB_SHELL_COMMAND $JUPYTERLAB_CONFIG` -eq '0' ];thenecho "shell_command is not set as /bin/zsh"echo $JUPYTERLAB_SHELL_COMMAND >> $JUPYTERLAB_CONFIGecho "set shell_command as /bin/zsh done."fifijupyter lab --ip="0.0.0.0" --port 8080 --notebook-dir=/home/user --no-browser --ServerApp.base_url=$JUPYTERLAB_BASE_URL --ServerApp.token="" &if [ ! -f "~/.zshrc" ];thensudo cp -r /opt/.oh-my-zsh ~sudo chown -R user:aide ~/.oh-my-zshcp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrcfiif [ ! -f "~/.bashrc" ];thentouch ~/.bashrcfiif [ `grep -c "zsh" ~/.bashrc` -eq '0' ];thenecho "zsh" >> ~/.bashrcfitail -f /dev/null
- 发财树多少钱一盆如何挑选发财树
- 海南黄花梨如何鉴别判断真假的方法
- 鼻子高的人命运如何 风水上说鼻子自然变高了是好事吗?
- 白芷敷脸的害处如何正确使用
- 好同伙疏远你的显示(难怪同伙越来越疏远你)
- 猪肉冷冻能放多久?冷冻肉如何快速解冻?
- 拉曼光谱仪是如何工作的 什么是拉曼光谱
- 红巨星是如何形成的 是什么让恒星成为超红巨星
- 网红爆汁馅心是如何做的,爆汁馅心详细配方详解
- 深爱你的女生会经常说什么(经常对你说这些话的女人)
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
