我花了很长时间在为cygwin安装的不同 shell 中标准化我的提示。
已安装的外壳:
- bash(默认登录外壳)
- 嘘
- csh(实际上是tcsh)
- 克什
- zsh
我的提示在bash、csh和zsh中是标准化的,但我无法使用sh和ksh。
我希望在所有 shell 中使用的提示类似于以下内容:
20121216 15:18:04 [shell] # date and time in yellow, shell in red
user@hostname pwd # user@host in green, pwd in yellow
$ # white
我已经将它设置为我希望它用于bash的方式,其中包含以下行/etc/profile
:
PS1="\[\e]0;\w\a\]\n\[\e[33m\]\D{%Y%m%d %H:%M:%S} \[\e[31m\][bash]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ "
我已经为csh设置了以下行.tcshrc
:
set prompt="\n%{\033[33m%}%Y%W%D %P %{\033[31m%}[csh]\n%{\033[32m%}%n@%M %{\033[33m%}%~\n%{\033[0m%}$ "
我已经为zsh设置了以下几行.zshrc
:
PROMPT="
%{$fg[yellow]%}%D{%Y%m%d} %* %{$fg[red]%}[zsh]%{$reset_color%}
%{$fg[green]%}%n@%m %{$reset_color%}%{$fg[yellow]%}%~%{$reset_color%}
$ "
但我似乎无法在任何地方为sh或ksh设置默认提示。我可以同时打开它们并手动设置PS1="$ "
,但我一辈子都不能让它自动设置。sh提示符看起来与bash提示符相同,并且ksh提示符是乱码(我假设它不喜欢它从bash继承的 PS1 的语法)。
我尝试失败的事情:
- 将 PS1 设置为
/etc/profile
(在从 读取 shell 名称的 case 语句中echo $0
) - 将 PS1 设置为
.kshrc
- 将 PS1 设置为
.shrc
- 将 PS1 设置为
.sh_profile
- 将 PS1 设置为
.profile
当我启动其中一个 shell 时, cygwin似乎只是不执行上面列出的文件。请注意,我只在bash中启动这些 shell 。
有任何想法吗?(对不起这本书,我只是想彻底。)