![Bash 脚本 - .到底工作吗?](https://linux22.com/image/179009/Bash%20%E8%84%9A%E6%9C%AC%20-%20.%E5%88%B0%E5%BA%95%E5%B7%A5%E4%BD%9C%E5%90%97%EF%BC%9F%20.png)
我确信这是一个非常简单的问题,但我很难通过谷歌找到合理的答案,因为它很难搜索(或者至少,我不知道正确的术语)。
我看到脚本中使用了一个句点(即“点”,又名这个家伙>“。”),我认为它基本上被扩展为“pwd”,即定义当前工作路径(根据ls -la
for的输出)实例)。但是,显然还有更多内容,例如,这里有两个例子,我不明白“.”是如何工作的。正在使用及其真正含义:
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
总之:
- 这称为“点表示法”。
- 该命令
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