在cygwin中标准化跨shell的提示

时间:2012-12-06 21:57:03

标签: cygwin sh ksh prompt .profile

我有一段时间在我为 cygwin 安装的不同shell中标准化我的提示。

已安装的shell:

  1. bash (默认登录shell)
  2. SH
  3. csh tcsh ,实际上)
  4. ksh的
  5. 的zsh
  6. 我的提示在 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
    • 中设置PS1
    • .shrc
    • 中设置PS1
    • .sh_profile
    • 中设置PS1
    • .profile
    • 中设置PS1

    当我启动其中一个shell时,似乎 cygwin 不会执行上面列出的文件。请注意,我只是从 bash 中启动这些shell。

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

1 个答案:

答案 0 :(得分:1)

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

如果ksh没有充当登录shell,则会尝试读取$ENV引用的文件,或$HOME/.kshrc如果未设置ENV

较旧的版本(特别是sun的 ksh88 )遭遇鸡和蛋的情况,因为您只能在 ENV中设置~/.profile ,但那么你仍然需要自己使用. $ENV来源文件。

请注意,必须导出ENVPS1才能被登录后生成的ksh实例(例如,来自screentmux)接收。< / p>