2012-12-06 40 views
2

我有一段時間來標準化我的提示,我已經爲cygwin安裝了不同的shell。在cygwin中跨殼標準化提示

安裝炮彈:

  1. 慶典(默認登錄shell)
  2. SH
  3. CSHtcsh的,實際上)
  4. KSH
  5. zsh的

我的提示是跨越慶典CSH,並的zsh規範,但我不能讓SH船上KSH

我期待所有的炮彈使用的提示是類似以下內容:

20121216 15:18:04 [shell] # date and time in yellow, shell in red 
[email protected] pwd   # [email protected] in green, pwd in yellow 
$       # white 

我已經把它設成我想爲慶典/etc/profile以下行的方式:

PS1="\[\e]0;\w\a\]\n\[\e[33m\]\D{%Y%m%d %H:%M:%S} \[\e[31m\][bash]\n\[\e[32m\]\[email protected]\h \[\e[33m\]\w\[\e[0m\]\n\$ " 

而且我已經得到了它與下面的行.tcshrc設置CSH

set prompt="\n%{\033[33m%}%Y%W%D %P %{\033[31m%}[csh]\n%{\033[32m%}%[email protected]%M %{\033[33m%}%~\n%{\033[0m%}$ " 

而且我已經得到了它具有以下行.zshrc設置的zsh

PROMPT=" 
%{$fg[yellow]%}%D{%Y%m%d} %* %{$fg[red]%}[zsh]%{$reset_color%} 
%{$fg[green]%}%[email protected]%m %{$reset_color%}%{$fg[yellow]%}%~%{$reset_color%} 
$ " 

但我似乎不能設置默認提示SHKSH任何地方。我可以打開他們兩個並手動設置PS1="$ ",但我不能讓我自己設置自動設置。該SH提示符看起來等同於慶典提示,以及KSH提示是亂碼(BC它不喜歡PS1的語法,它的從慶典繼承,我認爲)。

事情我已經嘗試過失敗:

  • /etc/profile設置PS1(在一個case語句讀取來自echo $0殼 名稱).kshrc
  • 設置PS1
  • 設置PS1在.shrc
  • 設置PS1在.sh_profile
  • 設置PS1在.profile

似乎cygwin的就是不執行,當我推出這些炮彈的一個上面列出的文件。請注意,我只能從bash以內發射這些炮彈。

任何想法? (對不起,我只是想徹底。)

+0

不再有'sh'這樣的東西了。它曾經是指Bourne Shell的原始版本,但現在已經與其他一些最小的特性shell(如'ash','bash'或'dash')相鏈接。它沒有你需要的功能 - 你可以嘗試從另一個shell中設置PS1,但它不會跟蹤時間,也不會跟蹤shell的工作目錄。 –

+0

'ksh'可以用'PS1 ='$ PWD $''跟蹤當前目錄 - 使用單引號推遲'$ PWD'的擴展,直到評估「$ PS1」。 'ksh'的原始文檔有添加日期和時間的黑客,但它仍然是一個(聰明的)黑客攻擊。 bash轉義序列在這裏沒有幫助。 –

+0

感謝那些信息,Henk。但我想我真正要問的是我在哪裏設置'ksh'中的默認提示? – nullrevolution

回答

1

官方Korn shell ksh93將按照該順序在登錄時讀取/ etc/profile和〜/ .profile。

如果ksh不充當登錄shell,它將嘗試讀取$ENV$HOME/.kshrc所指的文件,如果沒有設置ENV

舊版本(太陽ksh88尤其是)從一個雞和蛋的問題受到影響,因爲你只能在~/.profile設置ENV,但你仍然有自己的文件與源. $ENV

注意ENVPS1有以出口到通過登錄後催生了(比如,從screentmux)KSH情況下有所回升。

+1

+1並接受a)對'$ ENV'的引用,以及b)在之前評論中關於'sh'的信息。在一起,這導致我添加'export ENV = $ HOME/.kshrc'到我的'/ etc/profile',然後在〜/ .kshrc文件中添加'export PS1 = blahblahblah',最後設置默認提示符,登錄korn shell。謝謝! – nullrevolution