2

我花了很长时间在为cygwin安装的不同 shell 中标准化我的提示。

已安装的外壳:

  1. bash(默认登录外壳)
  2. csh(实际上是tcsh
  3. 克什
  4. zsh

我的提示在bashcshzsh中是标准化的,但我无法使用shksh

我希望在所有 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%}
$ "

但我似乎无法在任何地方为shksh设置默认提示。我可以同时打开它们并手动设置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 。

有任何想法吗?(对不起这本书,我只是想彻底。)

4

1 回答 1

1

官方 Korn shell ksh93将在登录时读取 /etc/profile 和 ~/.profile,按此顺序。

如果ksh不作为登录外壳,它将尝试读取由 引用的文件$ENV,或者$HOME/.kshrc如果ENV未设置。

较旧的版本(尤其是 sun 的ksh88)遇到先有鸡还是先有蛋的情况,因为您只能设置ENV . ~/.profile,但您仍然必须自己使用. $ENV.

请注意,ENV并且PS1必须导出才能被登录后生成的 ksh 实例拾取(例如, fromscreentmux)。

于 2012-12-11T22:09:58.583 回答