2016-06-11 62 views
0

我使用Ubuntu(亞馬遜EC2),當我鍵入cd,出現這種情況:爲什麼cd可以調用函數':'?

$ cd 
hi 
hi 
hi 
hi 
hi 
hi 
hi 
hi 
hi 
$ 

我以前曾提出:是一個函數::() { echo hi; }

這發生在頂級shell $SHLVL=1 ,但不在任何子shell中(鍵入bash然後嘗試重現此操作不起作用)。

有誰知道爲什麼會發生這種情況?

+2

「我以前做過:做個功能」......我敢問爲什麼? – ceejayoz

+1

@ceejayoz可能是因爲LDP [提到你可以!](http://www.tldp.org/LDP/abs/html/functions.html);) – Arjan

+4

'cd'是一個函數嗎?是否設置了「PROMPT_COMMAND」?請用'set -x'再次運行上面的代碼並提供輸出。 – kojiro

回答

5

你所做的是一個非常糟糕的主意,因爲:是shell命令。

在需要命令的結構中不時會很有用。舉例來說,如果你想代碼中使用while一個無限循環,它可以幫助:

while true ; do 
    : 
done 

取出:並且它沒有很好地形成更多:do需要一個命令。出了以下三個單行的,只有最後一個是正確的—試戴:

while true do done 
while true do ; done 
while true do : ; done 

如果你重新定義:作爲一個功能,一個很好的問題是:是,明確界定?但不要介意,假設它有效。突然間,這些不時出現在腳本中的:將會調用你的函數!

Amazon EC2 shell環境中的cd是什麼?也許這是一個功能。輸入set並瀏覽輸出。我經常定義一個自定義的cd函數;這很有用。您可以執行諸如動態更新提示和窗口標題等內容。

+0

'cd'確實被定義爲'set'所示的函數。我看不清如何調用':',但我沒有檢查整個輸出。謝謝您的回答。 –

相關問題