2016-06-11 64 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'所示的函数。我看不清如何调用':',但我没有检查整个输出。谢谢您的回答。 –

相关问题