【问题标题】:standardizing prompts across shells in cygwin在 cygwin 中跨 shell 标准化提示
【发布时间】:2012-11-25 01:21:12
【问题描述】:

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

已安装的外壳:

  1. bash(默认登录 shell)
  2. sh
  3. csh(实际上是tcsh)
  4. ksh
  5. 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


【解决方案1】:

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

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

旧版本(尤其是 sun 的 ksh88)遇到了鸡和蛋的情况,因为你只能设置 ENV in ~/.profile,但是你仍然有使用. $ENV 自己获取文件。

请注意,ENV 和 PS1 必须导出才能被登录后生成的 ksh 实例拾取(例如,来自 screen 或 tmux)。

【讨论】:

  • +1 并接受 a) 在您之前的评论中对 $ENV 的引用和 b) 关于 sh 的信息。这导致我将export ENV=$HOME/.kshrc 添加到我的/etc/profile,然后将export PS1=blahblahblah 添加到~/.kshrc,这最终为非登录korn shell 设置了默认提示。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2020-11-23
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多