2009-04-27 41 views
2

我發現下面的代碼someone's .bashrc無法瞭解線的.bashrc

# Source global definitions 
[ -f /etc/bashrc ] && . /etc/bashrc 

它顯然引起了我的Bash複製了很多。

單線表示什麼意思?

+0

你應該閱讀有關bash的[啓動文件處理( https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files)。 – 2016-06-12 17:21:45

回答

8

什麼可能會讓你感到困惑:[實際上是一個Unix shell命令。您可以在/bin找到它,當你更仔細,這是一個硬鏈接到test命令,這意味着你也可以這樣寫:

test -f /etc/bashrc && source /etc/bashrc 

.source快捷方式)。

歷史記爲您的娛樂:當Unix的被髮明,沒有屏幕,但「電傳打字機」,這是一種打字機。您向Unix主機發送了一個命令,電傳打印機會打印結果。傳聞如下:由於早期的Unix開發者厭倦了所有創建的teletypes,他們試圖將所有命令縮短爲兩個字母,所有選項都縮寫爲單個字母。

如果你是綠色的,則傳言是:爲了節省紙張和色帶,他們試圖縮短所有的命令,以兩個字母和所有選項的單個字母。

如果你查看/dev,你會看到所有那些tty文件,這是從原始teletypes中剩下的唯一文件。

[編輯]如何弄清楚,那[test都是同一件事:

這是一個兩步的過程。 ls -il [ test echo給出:

356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 [ 
356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 test 
67392 -rwxr-xr-x 1 root wheel 18K Sep 22 2007 echo 

首先,您會注意到「root」之前的「2​​」。這意味着有兩個指向相同數據的目錄條目(a.k.a文件名)(Unix語言:inode,i-node或「索引節點」)。磁盤上的每個inode都有一個唯一的編號,這是上例(356954)中的第一個編號。你可以看到[test共享相同的inode,但是echo沒有。

請注意,沒有快速方法可以獲取指向同一個inode的所有目錄條目。您必須在整個文件系統中搜索具有相同索引節點的條目(使用find /path -inode 356954

至於tty「文件」:這些實際上是設備節點。權限的第一個字母是「c」,如「字符設備」中的。你可以找到文件的「 - 」,目錄的「d」和塊設備的「b」(比如硬盤,軟盤等)。這不是一個文件,但它確實是一個程序。您可以通過向它發送數據(「寫入」「文件」中的某些內容)或從中讀取數據來與之通話。這個概念似乎與真實文件非常接近,以至於Unix發明者使用文件API以及稱爲「IO控制」(或ioctl)的東西來發送特殊命令(如查詢終端的大小)。

如果切換到控制檯模式( 「CTRL-ALT-F1」),你會看到類似這樣的:

Welcome to .... - Kernel .... (tty1) 

切換到另一臺主機(使用Alt-F2 ...的Alt-F6)你會看到他們連接到tty2tty6。登錄其中一個,並嘗試

回聲測試>的/ dev/tty1上

和字符串會出現連接到tty1在控制檯上。從tty中讀取並不是那麼容易,因爲已經有一個程序從中讀取(只要沒有登錄,可以輸入mingetty,登錄後可輸入loginbash)。如果您嘗試read line < /dev/tty1,那將與已在該控制檯上運行的程序發生衝突,但原則上它會起作用。

+0

謝謝您的解釋! – 2009-04-27 15:03:09

8

如果/ etc/bashrc存在(-f運算符)執行它。

這工作,因爲& &(邏輯與操作者)只計算第二個參數,如果第一個是真實的(加快)。所以如果文件存在,運行它!

它實際上被稱爲「AND列表構造」。

請參閱here瞭解更多信息。

你可能會考慮下列一些常用的例子太多:

make && make install 

它只如果make成功完成安裝。

+0

+1:用於說明&& – 2009-04-27 14:42:53

11

它檢查文件/ etc/bashrc是否存在,並在檢查成功時執行它。 dot命令是'source'命令的別名。

+0

+1點'澄清 – 2009-04-27 14:19:06