如何使Jupyter中的终端自动运行bash而不是sh

32

我喜欢终端功能,它在我们的使用案例中非常好用。我希望学生们能够直接从终端进行一些工作,以此来体验这种环境。自动启动的shell是sh,但它没有选取我的bash默认设置。当我输入"bash"时,一切都完美运行。如何让"bash"成为默认值呢?


我猜它应该选择你的默认 shell。如果你打开一个普通终端,你会得到什么 shell? - cel
使用ssh时,我得到了bash。我应该追踪它。 - Steven Lowenthal
你修复过这个问题吗?如果是,你是怎么做的? - OneTwo
5个回答

24

Jupyter使用环境变量$SHELL来决定要启动哪个shell。如果您使用init运行Jupyter,则在Ubuntu系统上将设置为dash。我的解决方法是在启动Jupyter的脚本中添加export SHELL=/bin/bash


1
我已经在 /etc/profile 和 /etc/environment 中设置了这个,但是我仍然有相同的问题,你有任何想法吗? - OneTwo
还可以使用SHELL=/bin/bash jupyter-lab ...命令来启动Jupyter。 - Vladimir Vargas

7

我尝试过最终的方式以便通过添加以下行到文件 /etc/environment 来切换系统范围内的 SHELL 环境变量:

    SHELL=/bin/bash

这在Ubuntu环境下有效。每隔一段时间,SHELL变量在重新启动后终端总是指向/bin/bash而不是/bin/sh
此外,设置CRON作业以在系统启动时启动jupyter notebook也会在jupyter notebook的终端上触发相同的问题。
原来我需要在CRON作业语句中包含Bash初始化文件(如~/.bashrc)的变量设置和源语句,如下所示,通过命令$ crontab -e
    @reboot source /home/USERNAME/.bashrc && \
            export SHELL=/bin/bash && \
            /SOMEWHERE/jupyter notebook --port=8888

通过这种方式,我可以通过远程Web浏览器(http://server-ip-address:8888/)登录Ubuntu服务器,并打开默认为Bash的jupyter笔记本终端,就像本地环境一样。


像魔法一样运行 - saumilsdk

7

您可以将以下内容添加到您的jupyter_notebook_config.py文件中

c.NotebookApp.terminado_settings = {'shell_command': ['/bin/bash']}

1
这对我来说没有起作用,你知道为什么吗?有什么想法吗? - OneTwo
在新版本中,您可能需要使用 c.ServerApp.terminado_settings 而不是 NotebookApp - krassowski
无论是使用 c.NotebookApp.terminado_settings 还是 c.ServerApp.terminado_settings,我在 Posit Workbench 中都会遇到以下错误:rstudio-server.service: Failed with result 'exit-code' - sharchaea

0

自从Jupyter服务器2.0.0以来,--ServerApp.terminado_settings="shell_command=['/bin/bash']"应该可以工作。

对于jupyterlab==3.6,我可以确认它可以工作:

jupyter lab --ServerApp.terminado_settings="shell_command=['/bin/bash']"

另请参见Juptyer Server PR #949


-9
在Ubuntu 15.10上运行Jupyter时,Jupyter shell将默认进入/bin/sh,它是一个指向/bin/dash的符号链接。
rm /bin/sh
ln -s /bin/bash /bin/sh

那个修复让我Jupyter终端引导到了bash。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接