【发布时间】:2012-11-25 01:21:12
【问题描述】:
我花了很长时间在为 cygwin 安装的不同 shell 中标准化我的提示。
已安装的外壳:
- bash(默认登录 shell)
- sh
- csh(实际上是tcsh)
- ksh
- 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 提示符是乱码(因为它不喜欢 PS1 的语法)我假设是从 bash 继承的)。
我尝试失败的事情:
- 在
/etc/profile中设置 PS1(在读取 shell 的 case 语句中 名称来自echo $0) - 在
.kshrc中设置PS1 - 在
.shrc中设置PS1 - 在
.sh_profile中设置PS1 - 在
.profile中设置PS1
当我启动其中一个 shell 时,似乎 cygwin 只是不执行上面列出的文件。请注意,我只在 bash 中启动这些 shell。
有什么想法吗? (对不起这本书,我只是想彻底。)
【问题讨论】:
-
再也没有
'sh'这样的东西了。它过去指的是原始的 Bourne Shell,但现在与其他一些最小功能 shell 相关联,例如ash、bash或dash。它没有您需要的功能 - 您可以尝试从另一个 shell 设置 PS1,但它不会跟踪时间,也不会跟踪 shell 的工作目录。 -
ksh可以用PS1='$PWD $ '跟踪当前目录——使用单引号来推迟$PWD的扩展,直到$PS1被评估。ksh的原始文档有一个添加日期和时间的技巧,但它仍然是一个(智能)技巧。 bash 转义序列在这里没有帮助。 -
感谢您提供的信息,亨克。但我想我真正要问的是我在哪里设置
ksh中的默认提示?
标签: cygwin sh ksh prompt .profile