使用自定义命令行绘图运行新的zsh和bash shell

使用自定义命令行绘图运行新的zsh和bash shell,bash,customization,command-prompt,zsh,Bash,Customization,Command Prompt,Zsh,是否可以使用命令行中的自定义PS1集运行新的zsh或bashshell?它应该分别覆盖.bashrc和.zshrc设置的默认主题 我说的是类似于zsh--myprompt=“是的,主人?>” 编辑: 我不想影响任何用户端配置文件。我希望它能为任何配置的用户工作。不会导出PS1='yes master?>'zsh/bash工作吗 我看不出为什么它不应该如此简单,但却实现了您的目标从命令行执行的任何操作都可能被配置文件覆盖。您需要稍微修改相应的文件以使用以下内容 # *After* you make

是否可以使用命令行中的自定义
PS1
集运行新的
zsh
bash
shell?它应该分别覆盖
.bashrc
.zshrc
设置的默认主题

我说的是类似于
zsh--myprompt=“是的,主人?>”

编辑:
我不想影响任何用户端配置文件。我希望它能为任何配置的用户工作。

不会
导出PS1='yes master?>'zsh/bash
工作吗


我看不出为什么它不应该如此简单,但却实现了您的目标

从命令行执行的任何操作都可能被配置文件覆盖。您需要稍微修改相应的文件以使用以下内容

# *After* you make any changes to PS1
if [[ -n $MY_PS1 ]]; then
    PS1=$MY_PS1
fi
如果调用shell作为

MY_PS1='yes master? > ' bash   # or zsh
然后将使用
MY_PS1
,而不是
{bash,zsh}rc
中配置的任何内容,创建您自己的用户可用的“shim”rcfile,然后使用
--rcfile
选项(对于bash)或
--rcs
选项(对于zsh)调用该文件。这应该首先获取用户的RCF文件。例如,我们将其命名为/usr/local/share/.fancypromptrc。在bash中,这可能看起来像:

source "$HOME/.bashrc"
export PS1="DOLLAZ $"
source "${ZDOTDIR:-$HOME}/.zshrc"
export PS1="DOLLAZ $"
在zsh中,这可能看起来像:

source "$HOME/.bashrc"
export PS1="DOLLAZ $"
source "${ZDOTDIR:-$HOME}/.zshrc"
export PS1="DOLLAZ $"
然后用户将使用
bash--rcfile/usr/local/share/.fancypromptrc
启动bash。在zsh中,它将是
zsh--rcs/usr/local/share/.fancypromptrc


这样用户就不必修改他们的RCF文件,如果他们已经设置了PS1,它仍然会被替换。我唯一能想象的是,如果他们有一个覆盖PS1的提示符命令,或者类似的命令,那么这种方法就不起作用了。

我找到了答案。我们应该使用自定义配置文件创建一个目录,如
.zshrc

source $ZDOTDIR_ORIG/.zshrc
export PS1="[x] "$PS1
然后使用脚本执行子shell,记住
ZDOTDIR\u ORIG
名称下的
ZDOTDIR
var的原始值,如下面的伪Python代码:

if os.environ.has_key('ZDOTDIR'):
    zdotdir = os.environ['ZDOTDIR']
else:
    zdotdir = os.path.expanduser('~')

os.environ["ZDOTDIR"] = shellConfPath
os.environ["ZDOTDIR_ORIG"] = zdotdir

然后执行shell。它将使用来自
ZDOTDIR
目录的配置文件。

好的,谢谢,它确实应该可以工作,但我需要一个解决方案,它将适用于任何用户,而不影响用户配置文件-可能吗?我在问题中添加了这个约束。您可以使用
PS1='…'bash--norc--noprofile
完全关闭任何配置文件处理(
zsh
有类似的选项可用),这将阻止对
PS1
进行超出您指定范围的任何进一步修改,但这可能会关闭很多其他配置。嗯,我不知道为什么,但它确实有效。我使用Python的函数从Python设置子环境执行shell,但是它被重写了。当尝试此方法时,它只起作用,没有被childs config覆盖,yay:)这不起作用。删除关键字
export
,如果用户的配置文件不更改
PS1
@chepner:对!我被终点站的考试弄糊涂了。它不适用于子进程。它只导出当前shell中的值。谢谢!这与我的答案相似。如果一切都正确,当使用
--rcs
选项执行shell时,shell不会首先加载用户选项吗?在这种情况下,我会坚持我的解决方案,但谢谢你解决了这个问题!:)另外,我在一个示例文件中对它进行了jsut测试,我不知道为什么,但是子shell没有使用
--rcs
所指的文件。您仍然必须从shim rcfile中获取用户的.bashrc/.zshrc,如上面的示例所示。你使用的是什么版本的zsh?我的系统上的zsh版本是5.0.5。奇怪的是,我运行的是5.0.2,它在那里工作。如果您发布一篇带有
zsh--version
zsh--rcs somefile
输出和
somefile
内容的摘要,也许我们可以解决这个问题。