Bash 脚本 - .到底工作吗?

Bash 脚本 - .到底工作吗?

我确信这是一个非常简单的问题,但我很难通过谷歌找到合理的答案,因为它很难搜索(或者至少,我不知道正确的术语)。

我看到脚本中使用了一个句点(即“点”,又名这个家伙>“。”),我认为它基本上被扩展为“pwd”,即定义当前工作路径(根据ls -lafor的输出)实例)。但是,显然还有更多内容,例如,这里有两个例子,我不明白“.”是如何工作的。正在使用及其真正含义:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

还有这个:

. <(cat /proc/32684/environ |xargs -0 -i echo {} |grep SSH)

(旁注:这是来自一篇关于 ssh-agent 的有趣文章:http://rabexc.org/posts/pitfalls-of-ssh-agents

查看这些使用的上下文,句点似乎代表“当前进程”或类似的东西(也许是当前 shell?)以及将文件或命令替换的输出加载到其中?

不过,如果知道答案就好了,而不是继续猜测和假设:-)

编辑: 一个额外的问题,就像“#!”一样是 shebang / hash-bang / Sharp-bang 等,点运算符/快捷方式有术语/名称吗?

答案1

如果给定的文件存在,则运行该文件。

。 <(ls) 例如将运行目录中的所有文件。名字是点。这是我在网上找到的。 https://pubs.opengroup.org/onlinepubs/009695399/utilities/dot.html 但老实说,我是个菜鸟,我今天才注册,哈哈。我相信我们很快就会看到很多天才回答这个问题。

答案2

总之:

  1. 这称为“点表示法”。
  2. 该命令source是点命令的别名,即.

Prvt_Yadav 的链接中有一些解释(https://stackoverflow.com/q/16011245/9235408)和韦兰(https://unix.stackexchange.com/a/114306/266125),但要回答这里的问题:

使用 。 ./ (点空格点斜杠).......将在当前 shell 中执行脚本而不分叉子 shell。

回答:https://stackoverflow.com/a/16011496/2927555

使用点符号在当前 shell 中的脚本文件中获取源代码,即无需创建子 shell

回答:https://stackoverflow.com/a/16011414/2927555

相关内容