2016-08-19 39 views
0

有沒有辦法找出所有來自bash的文件?如何獲取bash所有文件的列表?

或者,是否有單個入口點(或第一個入口點),我可以通過在頂部添加一個set -x來跟蹤並找到這些信息? (由於單個入口點,我不是指〜/ .bashrc或〜/ .bash_profile,因爲源鏈中有更高的其他文件告訴bash首先加載這些文件)。

回答

2

這裏沒有簡單的全部答案,它取決於登錄/交互屬性的組合。

一個登錄殼將輸出/etc/profile,和只有第一個發現中~/.bash_profile~/.bash_login,和~/.profile。您可以調用這些獨立的輸入點:/etc/profile不需要明確地輸入其他輸入點之一,它就是bash

對於非登錄互動,你有/etc/bash.bashrc~/.bashrc,再次獨立。

對於非登錄非交互式,如果定義,單個入口點是$BASH_ENV

你可以在GNU Bash手冊Bash startup files下找到官方說明。

1

有幾個地方加載所有啓動文件的過程開始。

table in this link會清楚:

Interactive login   /etc/profile 
Interactive non-login  /etc/bash.bashrc 
Script      $BASH_ENV 

瞭解login無論是作爲交互式登錄或調用選項--login非交互的shell。從man bash

當bash被調用以交互登錄殼,或作爲非交互式殼與--login選項,它首先從文件/etc/profile讀取並執行的命令,如果該文件存在。

然而,一種交互式外殼最常見的呼叫是su - $USER它們使用-作爲稱爲命令(未--login)的第一個字符。

這是默認值。 沒有阻止您編輯這些文件並添加在/ etc/profile文件是這樣的:

if [ -f /etc/bash.bashrc ]; then 
    source /etc/bash.bashrc 
fi 

這將保證/etc/bash.bashrc將在Interactive貝殼所有情況下采購。

應注意避免重複變量或操作(來源於兩個文件)。定義一個變量並在某些操作之前檢查它是否已經設置會使該過程更加可靠。

從bash的角度來看,腳本的起點是變量$BASH_ENV,必須在調用 bash之前在環境中進行設置。這將搜索擴展到可能調用bash的其他shell或程序。在這種情況下,沒有單一的確定性解決方案,只有通常的做法。

通常的做法是不使用 $ BASH_ENV可言,所以慶典將與所有的編譯的唯一選項啓動。

+0

交互式屬性對登錄shell無關緊要:'env -i bash -lc'echo $ PATH''將使用非交互式登錄shell,它讀取配置文件。 –

相關問題