2

cygwin用にインストールしたさまざまなシェル間でプロンプトを標準化するのにかなりの時間を費やしています。

インストールされたシェル:

  1. bash (デフォルトのログイン シェル)
  2. csh (実際にはtcsh )
  3. ksh
  4. zsh

私のプロンプトはbashcsh、およびzshで標準化されていますが、 shおよびkshを搭載できません。

すべてのシェルで使用しようとしているプロンプトは、次のようなものです。

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プロンプトは意味不明です (bc から継承しているPS1の構文が気に入らないと思います)。

私が失敗したこと:

  • PS1 の設定/etc/profile(からシェル名を読み取る case ステートメント内echo $0)
  • PS1の設定.kshrc
  • PS1の設定.shrc
  • PS1の設定.sh_profile
  • PS1の設定.profile

これらのシェルの 1 つを起動すると、cygwinは上記のファイルを実行しないようです。これらのシェルはbash内からのみ起動することに注意してください。

何か案は?(本で申し訳ありません、私は徹底的にしようとしています。)

4

1 に答える 1

1

公式の Korn シェルksh93は、ログイン時に /etc/profile と ~/.profile をこの順序で読み取ります。

がログイン シェルとして機能していない場合ksh、 が参照するファイルを読み取ろうとします。$ENVまたはが設定されていない$HOME/.kshrc場合ENV

古いバージョン (特に、sun のksh88 ) は、ENV しか設定できなかったため、ニワトリが先か卵が先かという状況に悩まされて~/.profileいました. $ENV

ログイン後に (たとえば、またはから) 生成された ksh インスタンスによって取得されるようにするには、ENVおよびPS1をエクスポートする必要があることに注意してください。screentmux

于 2012-12-11T22:09:58.583 に答える