我有一段时间在我为 cygwin 安装的不同shell中标准化我的提示。
已安装的shell:
我的提示在 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
我已经按照/etc/profile
中的以下行为 bash 设置了我想要的方式:
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 提示符是乱码(bc它不喜欢PS1的语法,它是继承自 bash ,我假设。)
我尝试过的事情都失败了:
/etc/profile
中设置PS1(在读取shell的case语句中)
姓名来自echo $0
).kshrc
.shrc
.sh_profile
.profile
当我启动其中一个shell时,似乎 cygwin 不会执行上面列出的文件。请注意,我只是从 bash 中启动这些shell。
有什么想法吗? (对不起,这本书,我只是想彻底。)
答案 0 :(得分:1)
官方Korn shell ksh93 将在登录时按顺序读取/ etc / profile和〜/ .profile。
如果ksh
没有充当登录shell,则会尝试读取$ENV
引用的文件,或$HOME/.kshrc
如果未设置ENV
。
较旧的版本(特别是sun的 ksh88 )遭遇鸡和蛋的情况,因为您只能在 ENV
中设置~/.profile
,但那么你仍然需要自己使用. $ENV
来源文件。
请注意,必须导出ENV
和PS1
才能被登录后生成的ksh实例(例如,来自screen
或tmux
)接收。< / p>