来源与 为什么会有不同的行为?


17

我最近了解到

. ./.a.a并且./.a.a是相同的。

但是尝试source source .a.a给出一个错误。IMO,.作为Bash的别名source不应有其他行为,那么我想念的是什么?

奖金,为什么. .可以而source source不能呢?


8
您可以为示例选择一个更清晰的名称:)。无论如何,是什么让您想到了. script并且./script是同一回事?他们肯定不是。另外,.不是的别名source。相反。.是标准,source是的别名.
terdon

2
花了一些时间看完Shell脚本后,您便习惯了该.命令,但我的意思source是,这是一个更好的命令,当您source somefile在脚本中看到脚本时,您会立即知道该语句的作用,但. somefile 不仅不清楚该语句的作用,你可以很容易地错过了. 总共人物
the_velour_fog

奖金,为什么呢。。可以,而源源不是吗?-错误消息多远bash: .: .: is a directory. .是确定需要加以解释。
反模式

@terdon-绝对正确。最初的例子是. ./.a.a .说实话。:-DA测验,如果可以的话。:-)链接的问题很棒,非常感谢。是什么让我有了这个主意的:我发现以这种方式执行文件并没有什么区别,而我在某处读取的事实.是的别名source。:-)
LAFK说恢复Monica

Answers:


27

您不能随便替换.source任何地方;如果

. ./.a.a

可以,您可以替换第一个.(至少在Bash中):

source ./.a.a

第二个.代表当前目录下,你不能替换source(尤其是不./source你所做的)。

source source

如果source在当前目录中有一个名为的文件,其中包含对当前shell有意义的文件,那就可以了。我看不出. .会怎样...

而且,. ./.a.a并且./.a.a不相同,第二种形式.a.a在单独的外壳中运行。请参阅在bash中采购(“。”或“源”)与执行文件之间有什么区别?有关详细信息。


9

source是应该按以下方式使用的shell关键字:sourcefile其中file包含有效的shell命令。这些shell命令将在当前shell中执行,就像从命令行键入命令一样。现在,.file做的完全一样。

除此之外,.仅表示“当前工作目录”,如./xyzxyz在“此目录中”)或a/b/./c/./d(与相同a/b/c/d)。

除此之外,.文件名仅具有约定的含义,如.foobar表示“隐藏”文件(不是真的...)或,如所示foobar.pdf,表示带有后缀的文件格式(此处.pdf)。

这些不同的含义不能互换。


8
.绝对不会过时。它不同于POSIX定义source的可移植文件的可移植方式。该别名是壳特定的,并且可以是不存在(例如在)或从标准的行为不同。sourcedash.
terdon

感谢@ terdon,Wiki表示在点首次出现该命令的C shell中不能接受以点(。)表示的源。
Noam Manos

1
@NoamManos也许,但是C-shell不是POSIX,因此它可以(并且确实)表现得非常不同。
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.