стандартизация подсказок в оболочках в cygwin

У меня уйма времени стандартизирует мои подсказки для разных оболочек, которые я установил для cygwin.

Установленные оболочки:

  1. bash (оболочка входа по умолчанию)
  2. ш
  3. csh (на самом деле tcsh)
  4. кш
  5. зш

Моя подсказка стандартизирована для bash, csh и 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 является тарабарщиной (потому что ей не нравится синтаксис PS1, который она использует). наследуя от bash, я полагаю).

Вещи, которые я пробовал безуспешно:

  • установка PS1 в /etc/profile (в операторе case чтение имени оболочки из echo $0)
  • установка PS1 в .kshrc
  • установка PS1 в .shrc
  • установка PS1 в .sh_profile
  • установка PS1 в .profile

Кажется, что cygwin просто не выполняет перечисленные выше файлы, когда я запускаю одну из этих оболочек. Обратите внимание, что я запускаю эти оболочки только из bash.

Любые идеи? (Извините за книгу, я просто пытаюсь быть тщательным.)


person nullrevolution    schedule 06.12.2012    source источник
comment
'sh' больше нет. Раньше он относился к оригинальной оболочке Bourne, но в настоящее время связан с какой-либо другой оболочкой с минимальными функциями, такой как ash, bash или dash. В нем нет нужных вам функций - вы можете попробовать установить PS1 из другой оболочки, но она не будет отслеживать ни время, ни рабочий каталог оболочки.   -  person Henk Langeveld    schedule 09.12.2012
comment
ksh может отслеживать текущий каталог с помощью PS1='$PWD $ ' -- используйте одинарные кавычки, чтобы отложить раскрытие $PWD до тех пор, пока не будет оценен $PS1. В исходной документации для ksh есть хак для добавления даты и времени, но это все еще (умный) хак. Эскейп-последовательности bash здесь не помогут.   -  person Henk Langeveld    schedule 09.12.2012
comment
Спасибо за информацию, Хенк. Но я думаю, что я действительно спрашивал, где я могу установить подсказку по умолчанию в ksh?   -  person nullrevolution    schedule 10.12.2012


Ответы (1)


Официальная оболочка Korn ksh93 будет читать /etc/profile и ~/.profile при входе в систему именно в таком порядке.

Если ksh не действует как оболочка входа в систему, она попытается прочитать файл, на который ссылается $ENV, или $HOME/.kshrc, если ENV не установлено.

Более старые версии (в частности, ksh88 от Sun) страдали от ситуации с курицей и яйцом, потому что вы могли установить только ENV в ~/.profile, но тогда вам все равно приходилось самостоятельно получать файл с помощью . $ENV .

Обратите внимание, что ENV и PS1 должны быть экспортированы, чтобы их можно было подобрать экземплярами ksh, созданными после входа в систему (скажем, из screen или tmux).

person Henk Langeveld    schedule 11.12.2012
comment
+1 и принятие за а) ссылку на $ENV и б) информацию о sh в вашем предыдущем комментарии. Вместе это заставило меня добавить export ENV=$HOME/.kshrc к моему /etc/profile, а затем добавить export PS1=blahblahblah к ~/.kshrc, что, наконец, устанавливает приглашение по умолчанию для оболочек korn без входа в систему. Спасибо! - person nullrevolution; 12.12.2012