为什么 cd 会调用函数“:”?
Why might cd call the function ':'?
我正在使用 Ubuntu (Amazon EC2),当我键入 cd
时,会发生这种情况:
$ cd
hi
hi
hi
hi
hi
hi
hi
hi
hi
$
我以前做过:是一个函数:: () { echo hi; }
这发生在顶级 shell $SHLVL=1
,但不会发生在任何子 shell(键入 bash
然后尝试重现它不起作用)。
有人知道为什么会这样吗?
你做的是一个非常糟糕的主意,因为 :
是 shell 空命令。
它有时在需要命令的结构中很有用。例如,如果您想使用 while
编写一个无限循环代码,它会有所帮助:
while true ; do
:
done
去掉:
就不是well-formed了:do
需要命令。以下三个one-liners中,只有最后一个是正确的——试一试:
while true do done
while true do ; done
while true do : ; done
如果您将 :
重新定义为一个函数,一个很好的问题是:它定义得好吗?但没关系,假设它有效。突然间,这些不时出现在脚本中的 :
将调用您的函数!
Amazon EC2 shell 环境中的 cd
是什么?也许这是一个功能。输入 set
并浏览输出。我经常定义一个自定义 cd
函数;这很有用。您可以执行动态更新提示和 window 标题等操作。
我正在使用 Ubuntu (Amazon EC2),当我键入 cd
时,会发生这种情况:
$ cd
hi
hi
hi
hi
hi
hi
hi
hi
hi
$
我以前做过:是一个函数:: () { echo hi; }
这发生在顶级 shell $SHLVL=1
,但不会发生在任何子 shell(键入 bash
然后尝试重现它不起作用)。
有人知道为什么会这样吗?
你做的是一个非常糟糕的主意,因为 :
是 shell 空命令。
它有时在需要命令的结构中很有用。例如,如果您想使用 while
编写一个无限循环代码,它会有所帮助:
while true ; do
:
done
去掉:
就不是well-formed了:do
需要命令。以下三个one-liners中,只有最后一个是正确的——试一试:
while true do done
while true do ; done
while true do : ; done
如果您将 :
重新定义为一个函数,一个很好的问题是:它定义得好吗?但没关系,假设它有效。突然间,这些不时出现在脚本中的 :
将调用您的函数!
Amazon EC2 shell 环境中的 cd
是什么?也许这是一个功能。输入 set
并浏览输出。我经常定义一个自定义 cd
函数;这很有用。您可以执行动态更新提示和 window 标题等操作。