我使用以下python3.6代码(g.py
)启动一个带有自定义提示的交互式bash shell:
import subprocess
import os
envi = os.environ.copy() # env of the python process
envi["PS1"]="my-prompt"
s = subprocess.Popen(['/bin/bash', '-i'], env=envi, shell=False)
s.communicate()
当我在debian stretch 9上运行它时,我得到:
initial_prompt> ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
206 pts/0 00:00:00 ps
initial_prompt> python3 g.py
user123§ced47a150f0c:ß$
user123§ced47a150f0c:ß$ ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
207 pts/0 00:00:00 python3
208 pts/0 00:00:00 bash
209 pts/0 00:00:00 ps
我得到的是user123§ced47a150f0c:ß$
,而不是my-prompt
。你知道吗
--norc
添加到/bin/bash
时,它可以工作,但我需要阅读~/.bashrc
。你知道吗~/.bashrc
中,PS1
不变。我没有~/.bash_profile
文件。你知道吗PROMPT_COMMAND
env变量为空。你知道吗
默认情况下,
bash
没有交互式shell的系统范围配置文件。但是,在config-top.h
中有一个编译时选项可以添加一个:如果启用了这个功能(我相信在Debian中是这样),那么在运行时如果不禁用
~/.bashrc
,似乎就无法禁用它。你知道吗Debian的
/etc/bash.bashrc
将PS1
的任何继承值替换为它自己的值。当然,您可以在自己的~/.bashrc
中重写它,但这意味着您不能在为其他人启动交互式shell时通过环境强制值PS1
。最后,由用户选择他们的提示是什么,而不是你的。你知道吗一种解决方法可能是提供自己的rcfile,它显式地获取用户的
~/.bashrc
文件,然后将提示设置为所需的内容。我不知道有什么简单的方法可以在没有临时文件的情况下做到这一点:在Debian Stretch下,
PS1
设置在/etc/bash.bashrc
:这也是来源于
/etc/profile
:相关问题 更多 >
编程相关推荐