2015-10-29 34 views
2

我们已经创建了大部分相同的定制版本docker's quickstart script。一个进一步的定制,我们想提出的是,当你在一个泊坞窗配置shell来更改提示明确指出:如何更改生成的子bash的bash提示符?特别是码头外壳

(docker) ~/src/code $

脚本生成子壳这样的:

eval $($DOCKER_MACHINE env $VM --shell=bash) 

USER_SHELL=$(dscl /Search -read /Users/$USER UserShell | awk '{print $2}' | head -n 1) 
if [[ $USER_SHELL == *"/bash"* ]] || [[ $USER_SHELL == *"/zsh"* ]] || [[ $USER_SHELL == *"/sh"* ]]; then 
    $USER_SHELL --login 
else 
    $USER_SHELL 
fi 

我可以很容易地用export PS1="(docker)$"更改我的主机提示,但是难以在产生子shell中进行这样的更改。

我已经试过$USER_SHELL --login --noprofile -c "export PS1='(docker)'"

没有运气。

+2

登录shell会清除环境,但“HOME”,“SHELL” ,PATH,TERM,LOGNAME和USER。如果你没有很强的理由将shell作为登录shell运行,那么你可以直接删除'--login'选项。 – 4ae1e1

+0

@ 4ae1e1真的吗? 'export FOO = 5; bash --login';然后'echo $ FOO'。仍然会打印5.据我所知,登录shell和“常规”shell之间唯一的区别在于它在启动时会生成一个不同的文件。 – chepner

+0

嗯,我想我错了。忽略我的评论。 – 4ae1e1

回答

1

-c选项会导致shell执行给定的字符串,然后退出。相反,你可以用

PS1='...' $USER_SHELL --login --noprofile 

PS1所需的值添加到交互式shell(一般情况下,你不需要出口PS1,它仅用于外壳本身,而不是通过所有的子进程。任何子shell都会从其配置文件中配置它们的提示,这就是为什么您需要--noprofile以防止它覆盖您从“外部”提供的提示。)