编辑:实际上,它不是别名(参见答案)
众所周知,在 shell 中,点命令 ( .
) 是 source 命令的别名。
但我想知道这么奇怪的别名背后是否有原因?显然,我不经常使用它,所以我需要这么短的别名。
那么,为什么要加一个点呢?为什么 forsource
而不是更常用的命令,例如cd
or ls
?为什么还要别名?这背后有充分的理由吗?还是有历史原因?
笔记:我最初在服务器故障上发布了这个问题,但建议我将其发布在这里。
答案1
.
是个POSIX标准。
source
是 bash 的内置同义词,.
并且不像.
另请注意,Bash 参考手册中.
列出了4.1 Bourne Shell 内置函数并列source
在下面4.2 Bash 内置命令作为:
的同义词。 (请参阅 Bourne Shell 内置函数)。
bash 命名它可能是source
因为它在 C shell 中被称为(该命令显然源自该命令)。
答案2
就 Bash 而言,.
和source
不是其中一个或另一个的别名,这是一个简单的事实,它们都是调用相同底层函数 的内置函数source_builtin
。
看一下source.def
Bash 源代码中的文件:
$PRODUCES source.c
$BUILTIN source
$FUNCTION source_builtin
$SHORT_DOC source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END
$BUILTIN .
$DOCNAME dot
$FUNCTION source_builtin
$SHORT_DOC . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END
参考
答案3
点命令很可能是在 1976 年由 Bourne Shell 引入的。
source 命令由 csh 于 1977 年或 1978 年引入。
因此,一项“发明”不存在别名关系,而是同时有两个不同的名称。
顺便说一句:我可以告诉你为什么cd
这样命名。该命令以前被称为chdir
,但是对于 1974 年即将推出的 110 波特调制解调器来说,这太长了(输入速度很慢)...