2016-04-28 4 views
0

У меня возникла проблема с Cygwin, относящаяся к XTerm.exe сеансам, не загружая BASH конфигурационный файл (ы).Могу ли я заставить XTerm.exe по умолчанию использовать BASH-оболочку и другие оболочки без входа в Cygwin для загрузки ~/.bashrc?

Для начала, мой .startxwinrc является:

#!/bin/sh 

xrdb -merge ~/.Xresources 
xterm -geometry +0+60 -ls & 
xterm -geometry +0-100 & 
exec xclock 

... и мой .Xresources является:

Xft*antialias:   true 
Xft*autohint:   true 
XTerm*background: white 
XTerm*foreground: black 
XTerm*cursorColor: orchid 
XTerm*fullCursor: true 
XTerm*reverseVideo: false 
XTerm*geometry: 80x40 
XTerm*scrollBar: true 
XTerm*rightScrollBar: true 
XTerm*scrollTtyOutput: off 
XTerm*scrollKey: on 
XTerm*reverseWrap: true 
XTerm*saveLines: 10000 
XTerm*faceName:  BitStream Vera Sans Mono 
XTerm*faceSize:  12 
XTerm*toolBar:  off 
XTerm*VT100.Translations: #override\n\ 
     <Key>BackSpace: string(0x7F)\n\ 
     <Key>Delete: string("\033[3~")\n\ 
     <Key>Home: string("\033[1~")\n\ 
     <Key>End: string("\033[4~")\n\ 
     <KeyPress>Prior : scroll-back(1,page)\n\ 
     <KeyPress>Next : scroll-forw(1,page) 

Я начинаю свой X-сервер, как:

startxwin & 

И I см. приведенные выше конфигурации. Я получаю два окна XTerm и xclock (d цвет и прокрутка и т. д. соответствуют моим спецификациям).

Но любопытно, что запрос терминала не является тем, что я установил в своем конфигурационном файле ~/.bashrc.

Сначала я думал, что мой вопрос был связан с этими вопросами:

Why is my .bashrc not read under cygwin?
Cygwin shell doesn't execute .bashrc

... которые предполагают вопрос в том, что фактические параметры конфигурации загружаются из ~/.profile или ~/.bash_profile, возможно. Но добавление ничего не сделало.

Чтобы проверить, что они не были запущены я добавил строку, как это для каждого из файлов конфигурации три Баш (.bashrc, .bash_profile и .profile) в моем домашнем каталоге:

echo "**** EXECUTING /home/JasonMick/.bash_profile *****" | \ 
    tee -a /tmp/shell.log 

Файл никогда не пишется ... так ясно, что эти файлы никогда не касаются.

Далее я подтвердил, что в моих переменных среды Windows нет переменной «HOME» (что может быть источником таких проблем). Не было такой переменной, поэтому я был в порядке.

Далее я проверить некоторые основные вещи о состоянии оболочки, используя ...

printf '%s\n' $SHELL $HOME $USER 

Результаты для XTerm являются:

/бен/Баш
/дома/JasonMick
JasonMick

Эти результаты соответствуют идентичным результатам той же команды ex ecued в терминале X11 не mintty (который я обычно использую для запуска startxwin). Однако, когда я открываю новый mintty, подсказка верна в соответствии с настройками в моем домашнем каталоге .bashrc.

Чтобы быть в безопасности, я искал .profile, .bashrc и .bash_profile файлов в /etc/.Я нашел следующие файлы:

/etc/profile 
/etc/bash.bashrc 
/etc/skel/.bashrc 
/etc/skel/.bash_profile 
/etc/defaults/etc/skel/.bashrc 
/etc/defaults/etc/skel/.bash_profile 
/etc/defaults/etc/bash.bashrc 
/etc/defaults/etc/profile 

Я добавил принты всем из них.

В mintty Я, /etc/shell.log файл получает следующие команды:

**** ИСПОЛНЕНИЯ/и т.д./профиль ****
**** ИСПОЛНЕНИЯ/и т.д./Баш .bashrc *****
**** ИСПОЛНЕНИЯ /home/JasonMick/.bash_profile *****

... так что, как представляется, вызывая /etc/ файлы, а затем, наконец, вызывая .bash_profile в моем домашнем каталоге, автоматически, без каких-либо вызовов источника от /etc/ расположенных файлов конфигурации.

Извлекая журнал, я запускаю startxwin. Xterm открывается, но файла журнала нет!

Это означает, что XTerm не касается ЛЮБОГО файла конфигурации .. не в /etc/ не в ${HOME}!

Единственное различие, которое я нашел в том, что при вызове echo $0 $- в mintty я получаю:

-bash himBH

... где, как и в XTerm я получаю:

bash himBH

Согласно информации по адресу:

Difference between Login Shell and Non-Login Shell?
Why 'echo $0' gives different result for two different terminals?

Мой Баш оболочки в Xterm является интерактивный (я флаг в $-), не Логин (не - в передней части $0) BASH оболочка, в то время как мой mintty является iteractive, логинBASH оболочки.

Хорошо. Основываясь на второй ссылке выше, я все еще ожидаю, что мои не могут войти в системуинтерактивных снарядов для загрузки моего ~/.bashrc. Но опять же, как указано выше, он не только не загружает этот файл ... они не загружают ни один файл конфигурации bash, насколько я могу судить. Нет в ${HOME} ... нет в /etc/.

Любая идея, как заставить не действующие в рамках Войти оболочки в Cygwin (т.е. XTerm по умолчанию сеанс оболочки), чтобы правильно источник ~/.bashrc или ~/.bash_profile?

Я что-то не так?

ответ

0

Я обнаружил, что в Cygwin я могу получить не действующие в рамках Войти оболочек загрузить свои параметры конфигурации, вызывая export ENV=~/.bashrc в моем .startxwinrc файле. Новый файл .startxwinrc является:

#!/bin/sh 
export ENV=~/.bashrc 
xrdb -merge ~/.Xresources 
xterm -geometry +0+60 -ls & 
xterm -geometry +0-100 & 
exec xclock 

Bother xterm сессий и их дети теперь правильно источник моего ~/.bashrc.

@Gilles в потоке Difference between Login Shell and Non-Login Shell? состояний:

«При запуске оболочки в терминале в существующей сессии (экран, X терминал, терминал буфер Emacs, оболочка внутри другого, ...), вы получите интерактивный, не Войти оболочки. Это оболочка может прочитать файл конфигурации оболочки (~/.bashrc для Баш вызывается в bash, /etc/zshrc и ~/.zshrc для Zsh, /etc/csh.cshrc и ~/.cshrc для CSH, файл, указанный в ENV переменной для POSIX/XSI-совместимых оболочек такие как тире, ksh и bash при вызове sh, $ENV если установлено и ~/.mkshrc для mksh и т. Д.). "

Когда я впервые прочитал это, первый пункт, казалось, позволяют предположить, что ~/.bashrc загружается автоматически нерегистрированная оболочек. В то время как во втором предложении указано, что переменная ENV может быть определена для установки местоположения файла конфигурации для bash, язык первого предложения не дает понять, нужно ли это всегда или просто иногда? Основываясь на моих выводах, возможно, что «иногда» верно для некоторых платформ, где файлы GUI по умолчанию включают вызов для экспорта переменной ENV, соответствующей файлу конфигурации оболочки по умолчанию.

@ Связанное решение ThomasDickey связанного вопроса помогло мне переоценить ответ @Gilles, упомянутый выше. Тем не менее, его предложение изменить мои звонки XTerm на логин оболочки не является чем-то на данный момент. Я считаю лучшим ответом, поскольку единственная разница, которая меня беспокоила, заключалась в невозможности автоматически загрузить конфигурацию оболочки, которую исправляют мои исправления для не-логин снарядов.

Есть различия в звонках на uptime и в некоторых других сообщениях, связанных с сообщениями, как Difference between..., но это не то, что я предвижу быть заботой о моем случае использования. Мое развертывание - однопользовательское локальное развертывание с использованием Cygwin без намерения принять входящие ssh звонки на мою машину. Следовательно, нет веской причины, я могу найти не использовать более простое исправление одной строки, которое применяет надлежащий файл конфигурации через ${ENV} ко всем XTerm s, а не несколько более подробное исправление добавления флага для каждого звонка XTerm, сообщая ему, что он запускает свой shell в логин режим.

1

Вы могли заметить, это также: Run xterm with login shell or not?, который указывает на то, что loginShell ресурс XTERM может быть использован, чтобы сказать ему, чтобы выступать в качестве оболочки.

Кроме того, не установлен (или установлен неверно) HOME переменная мешает поиску .bashrc при запуске, согласно Cygwin FAQ. В FAQ часто упоминается typical problems with HOME.

+0

Я ценю вашу помощь, но хочу дать конструктивную критику в отношении редактирования этого ответа. Я чувствую, что текст в '$ {HOME}' несколько посторонний, поскольку я специально показываю, что он правильно установлен в ** ** не-login ** оболочке, и я также заявляю, что он НЕ установлен в моих переменных среды Windows , Поэтому проблемы, которые возникают у вас, в реальности, я уже упоминал в тексте вопроса и разъяснил, что это не относится к моему развертыванию. –