`. 是什么意思? /路径/命令`做什么? (点后空格,绝对路径)

`. 是什么意思? /路径/命令`做什么? (点后空格,绝对路径)

本 Bash 补全指南我们了解到,为了让 Bash 执行自动完成,必须执行. /etc/etc/bash_completion.d/foobar(注意后面的空格.) 以便 Bash 完成工作。

$ /etc/bash_completion.d/ssh
bash: /etc/bash_completion.d/ssh: Permission denied
$ . /etc/bash_completion.d/ssh
$ ls -l /etc/bash_completion.d | grep ssh
-rw-r--r-- 1 root root   297 Jan 28 18:04 ssh

是命令.的快捷方式source吗?如果不是,那是什么?不可能用谷歌搜索,man source什么也不返回,并且apropos source提供info source了太多不相关的信息,以至于我无法判断我要找的东西是否在那里。我怎样才能开始 RTFM 自己找到这个问题的答案?

答案1

.与功能相同source

一如既往,第一个参考是man bash手册页,您可以通过搜索来确认您的初步猜测/ source

...使用或源执行的 shell 函数或脚本....

是第一个参考,但再进一步你会发现一个部分Shell 内置命令

. filename [arguments]
source filename [arguments]
在当前 shell 环境中读取并执行 filename 中的命令,并返回 filename 中最后执行的命令的退出状态。如果 filename 不包含斜杠,则使用 PATH 中的文件名来查找包含 filename 的目录。在 PATH 中搜索的文件不必是可执行的。当 bash 不是 posix 模式时,如果 PATH 中没有找到文件,则搜索当前目录。如果关闭 shopt 内置命令的 sourcepath 选项,则不会搜索 PATH。如果提供任何参数,它们将在执行 filename 时成为位置参数。否则位置参数不变。返回状态是脚本中最后退出命令的状态(如果没有执行命令则为 0),如果未找到或无法读取文件名则为 false。

事实上它是一个 bash 内置函数,这就是源代码没有自己的手册页的原因,这就是 apropos 失败的原因。

答案2

您的简要回答:

  1. . absolute_path/mycommand 来源mycommand目录中的脚本文件absolute_path/。供进一步参考在这里读
  2. 是的 .source是等价的。
  3. 需要时请询问helpbash shell自己。您将获得内置命令的答案。

多说几句
通常最简单的方法也是最难以捉摸的:我们没想到我们可以问help当内部定义命令时。
通过type .type source我们可以注意到那些是内置命令。

Hastur@Cthulhu:~> type . source  
. is a shell builtin  
source is a shell builtin

一旦我们知道了,help我们就可以快速获得一些关于它们的信息。提示中不带参数的
命令为我们提供:help

GNU bash,版本 4.1.2(1)...
这些 shell 命令是内部定义的
类型help查看此列表。输入help name以了解有关该功能的更多信息姓名
用于info bash了解有关 shell 的更多一般信息。
使用man -k' orinfo' 查找有关此列表中未包含的命令的更多信息。

同时您help .help source获得了相同的完全相同的帮助:

source: 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.

“显而易见的是,除非有人简单地表达出来,否则我们永远不会看到这一点。”纪伯伦

答案3

这个点“.”表示在当前 shell 上下文中从文件名参数读取并执行命令。相当于源码。该样式来自Bourne shell,请参考 http://ss64.com/bash/source.html

相关内容