簡體   English   中英

為什么導出的變量而不是.bash_profile的別名在非登錄shell中起作用?

[英]Why do exported variables but not aliases from .bash_profile work in non-login shells?

我正在使用Fedora 20圖形桌面。 我發現放在.bash_profile中的別名無效。 然后我發現圖形終端不是登錄外殼,因此根本不讀取bash_profile。

現在奇怪的是, 導出命令確實在.bash_profile中有效。
我的.bash_profile如下:

#bash_profile    
export mytest=bash_profileIsRead
alias kk=ls

測試結果:

$ shopt login_shell
login_shell off
$ echo $mytest
bash_profileIsRead
$ kk
bash: kk: command not found...

別名不像環境變量那樣被繼承。 它們不應放置在配置文件中,而應放置在.bashrc文件中。

基本上,.profile(或.bash_profile)用於繼承的內容(例如env變量),而rc文件用於必須在非登錄外殼程序(例如別名)中重新初始化的內容。

這沒有什么不尋常或令人驚訝的。

您的.bash_profile在每個會話中由登錄Shell運行一次。 不是由您稍后在會話中運行的其他Shell運行的。

相比之下, .bashrc由每個交互式shell實例運行,因此在整個會話中都將使用別名和放置在其中的shell函數之類的東西。

環境變量只需要設置一次,因為它們是由子進程(每個子進程,而不僅僅是shell!)繼承的。 別名不是繼承的,因此需要在每個shell中進行設置。

有關更多信息,請參見wooledge.org Wiki (由irc.freenode.org的#bash頻道維護) 上的DotFiles頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM