"source" 和 "." 和有什么不一样?

bin*_*inW 160 bash scripts

使用Bashsource /some/script. /some/script在 Bash 中执行脚本(例如 /some/script)有什么区别?

小智 142

source并且.Bash 中是同义词。

对于可能想验证命令只是同义词而仅此而已的任何人,请查看源代码,例如 4.3 版,并检查文件builtins/source.def. 您将了解到这两个内置命令source.,使用相同的功能:source_builtin

  • @binW:`.` 是传统的源命令,继承自古老的 bourne shell。`source` 只是一个与 `.` 完全相同的 bash 内置函数,大概是因为它更具可读性(单独的 `.` 可能很难用小字体发现)。你会看到 `help source` 和 `help .` 显示相同的信息。 (13认同)
  • @binW:如果您查看`man bash`,然后搜索`source`,您会看到`source filename [arguments]` 是` 的同义词。文件名[参数]`。 (3认同)

jjg*_*jjg 47

.sourcein bash同义,但在 POSIX sh 中则不同,因此.如果您的脚本由 /bin/sh 运行,则应使用。请注意,bash 声称在作为 /bin/sh 调用时像 POSIX sh 一样运行,但source毫无怨言地接受了。

这种行为让我很头疼,例如,在 ash 下运行时,使用 bash 测试的脚本作为 /bin/sh 失败。

  • POSIX 不限制外壳。POSIX 只是说;外壳应至少支持这个和那个功能。因此,只要实现了 POSIX 描述的功能,POSIX shell 就可以自由实现附加功能。当shebang 说`#!/bin/sh` 时,你不应该假设shell 支持除了POSIX 特性之外的任何东西。http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18 (17认同)
  • 这个答案对我有帮助,因为 sh 经常在 cron 中使用。 (3认同)