根据这个问题的公认答案:,Python 可以很好地替代 bash。
那么我的问题是:我如何进行无缝切换?我认为要进行这样的切换,主要要做的事情是:在启动虚拟终端时,调用一些 Python shell(但是怎么样?),而不是像 Bourne shell 这样的东西。
那有意义吗?如果是的话,我该怎么做呢?维基百科对常见 shell 的比较没有列出单个 Python shell:命令 shell 的比较
答案1
我知道这个问题现在已经很老了,但是有一个基于 Python 3 超集的新 shell,称为 xonsh,这可能就是您正在寻找的。
来自网站:
Xonsh 是一种类似 Python、BASHwards 的 shell 语言和命令提示符。该语言是 Python 3.4+ 的超集,带有您在 Bash 和 IPython 中习惯使用的附加 shell 原语。它适用于所有主要系统,包括 Linux、Mac OSX 和 Windows。 Xonsh 适合专家和新手的日常使用。
答案2
该线程及其接受的答案特别是关于使用 Python 作为 shell脚本编写,不作为交互的壳。
要使用不同的语言编写脚本,请将eg 放在脚本的顶部#!/usr/bin/env python
而不是。#!/bin/bash
如果您想尝试不同的交互式 shell,只需运行它,例如ipython
在现有的 shell 提示符处键入。如果您决定采用该 shell,请SHELL
在会话开始时设置环境变量(在~/.profile
大多数环境中或在~/.pam_environment
),例如export SHELL=/usr/bin/ipython
( .profile
syntax) 或SHELL="/usr/bin/ipython"
( .pam_environment
syntax)。
在我看来,我见过的基于 Perl 或 Python 等高级语言的 shell 都不足以用于交互式使用。对于常见任务来说,它们太冗长了,尤其是启动应用程序的 shell 的常见工作。我4年前写过类似的话题;我认为自那时以来,情况并没有得到根本改善。
答案3
而不是
原因是Python不支持处理提升的权限。最坏的情况是编辑系统文件。
比较
sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net
和:
out = subprocess.run('''sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net''', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env={"PATH": "/usr/bin"})
您不能对系统文件使用 Python 的本机文件处理,因为 Python 本质上无法以提升的权限执行子命令。
答案4
伊蟒蛇没问题。另外,看看“os”库。