2016-04-28 64 views
0

我遇到Cygwin問題,具體到XTerm.exe會話未正確加載BASH配置文件。我可以在Cygwin中強制XTerm.exe的默認BASH Shell和其他非登錄shell來加載〜/ .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 & 

我看到上面的配置工作...我得到兩個XTerm窗口和一個xclock(一個d的顏色和滾動等按我的規格)。

但奇怪的是終端提示不是我在我的~/.bashrc配置文件中設置的。

起初我還以爲我的問題涉及到這些問題:

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

...這表明問題是,實際的配置設置從~/.profile~/.bash_profile,或許加載。但添加這些沒有做任何事。

爲了驗證他們不跑我加入這樣一行到三個bash的配置文件(.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在非X11終端mintty(我通常用它來啓動startxwin)執行。但是,當我打開新的mintty提示是正確的,根據我的主目錄.bashrc文件中的設置。

爲了安全起見,我在/etc/中搜索了.profile,.bashrc.bash_profile文件。我發現以下文件:

/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文件得到以下命令:

****執行/ etc/profile文件****
****執行/等/慶典.bashrc中*****
**** EXECUTING /home/JasonMick/.bash_profile *****

...所以它似乎是在提醒/etc/文件,最後調用.bash_profile在我的主目錄中,自動地,沒有任何來自的源調用0位於配置文件。

刪除日誌,我啓動startxwin。 Xterm打開,但日誌文件不在那裏!

這意味着XTerm沒有觸及任何配置文件..不在/etc/不在${HOME}

我發現的唯一的區別是調用minttyecho $0 $-當我得到:

-bash himBH

...這裏爲的XTerm我得到:

bash himBH

據當時資料:

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

xterm中我的bash shell是一個互動(在$-標誌)非登錄(無- 在$0BASH外殼,而我的minttyiteractive,登錄BASH外殼。

好的。基於上面的第二個鏈接,我仍然期望我的非登錄交互式炮彈來加載我的〜/ .bashrc。但是,如上所述,它不僅不加載該文件...他們沒有加載任何bash配置文件,據我所知。沒有在${HOME} ...沒有在/etc/

任何想法如何強制非登錄貝殼Cygwin中(即XTerm默認的shell會話)正確源~/.bashrc~/.bash_profile

我做錯了什麼?

回答

0

我發現,在Cygwin我可以得到非登錄炮彈在我.startxwinrc文件調用export ENV=~/.bashrc加載它們的配置設置。新.startxwinrc文件是:

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

打擾xterm會議和他們的孩子現在可以正確地源我~/.bashrc

@Gilles在線程Difference between Login Shell and Non-Login Shell?狀態:

「當你在一個現有的會話啓動終端的外殼(屏幕,X終端,Emacs的終端緩衝,裏面另一個殼,...),你會得到一個互動,非登錄殼,這殼可能會讀出殼配置文件(~/.bashrc對於bash援引爲bash/etc/zshrc~/.zshrc爲zsh的,/etc/csh.cshrc~/.cshrc用於CSH,通過對POSIX/XSI兼容彈ENV變量指示的文件如,$ENV(如果設置)和(例如破折號,ksh和bash)爲mksh等)。「

當我第一次讀到,第一條似乎表明,~/.bashrc非登錄炮彈自動加載。雖然第二個子句確實指出可以定義變量ENV來爲bash設置配置文件位置,但第一個子句的語言使得不清楚這是必需的還是有時是必需的?根據我的發現,對於某些平臺而言,「有時」是可能的,其中默認GUI文件包含調用以導出對應於默認shell的配置文件的ENV變量。

@ ThomasDickey對相關問題的鏈接解決方案幫助我重新評估上面引用的@Gilles答案。然而,他建議將我的XTerm調用改爲登錄 shell是不是在這一點上,我認爲是最好的答案,因爲唯一與我有關的區別是無法自動加載shell配置,我的修復措施對於非登錄炮彈。

uptime和某些其他報告調用的調用存在差異,如Difference between...所述,但這些並不是我擔心的用例。我的部署是使用Cygwin的單個用戶本地部署,無意接受傳入的ssh調用我的機器。因此沒有令人信服的理由,我可以發現不採用更簡單的一行修正,即通過${ENV}將適當的配置文件應用於所有XTerm,而不是稍微詳細地修改爲每個XTerm調用添加一個標誌,告訴它啓動它的外殼在登錄模式。

1

您可能已經注意到,這也:Run xterm with login shell or not?,其中指出的xterm的loginShell資源可用來告訴它作爲一個登錄shell。

此外,未設置(或不正確設置)HOME根據Cygwin FAQ啓動時可變干擾採購.bashrc。 FAQ提到了一些typical problems with HOME

+0

我感謝您的幫助,但希望對編輯提出一些建設性的批評以回答此問題。我覺得'$ {HOME}'上的文本有些無關緊要,因爲我明確表明它在正在討論的**非登錄** shell中正確設置,並且我進一步聲明它並未設置在我的Windows環境變量中。因此,您提出的問題雖然真實,但我已經在問題文字中提到並澄清,但不適用於我的部署。 –

相關問題