之间有什么区别。和 ./ 在 bash 中?

What is the difference between . and ./ in bash?

运行 此命令(其中 a.out 是有效的 C 可执行文件):

. a.out

...导致此错误:

bash: .: a.out: cannot execute binary file

但是,运行以下命令:

./a.out

...成功执行 C 二进制可执行文件。

显然,这里发生了两种类型的执行,有什么不同?

  • ./program 运行s 一个名为 program 的文件位于您当前的工作目录 (./)( 在新的 shell 对于 shell 脚本)。
  • .source 相同,后者 运行 是您当前 shell[=24= 中的 shell 脚本 ].与 ./program 不同,它不能用于 运行 二进制文件!例如,您可以将此命令用于 运行 您的 .bashrc shell 脚本,因为您希望此脚本修改您的 当前 shell.

第一个以 a.out 作为参数运行 .(点)命令。点命令的工作是将文本文件解析为在当前 shell 环境中执行的命令。它给你一个错误,因为 a.out 不是文本文件。

第二个执行./a.out,意思是“当前目录中名为a.out的程序。

.,单独就是source命令。它读取一个文件并在当前 shell 中逐行执行它 - 如您所见,它不适用于二进制可执行文件(与脚本相反)。

在路径的上下文中,例如,./.代表当前目录。所以 ./a.out 意味着 "run the file a.out in the current directory".

shell使用空格分隔运行的命令及其参数。

在第一个例子中,运行的命令是.,参数为a.out. 命令是 source 的 shell 快捷方式,它将包含 shell 命令的文件的名称作为其第一个参数,并且 运行s 这些命令在当前 shell。此命令失败,因为 a.out 是二进制文件,而不是 shell 脚本。

在第二个例子中,运行的命令是./a.out,意思是运行当前目录下的文件a.out

正如大家所说:
. myfile:执行来自 myfile 的命令。 (就像中的 source 命令 CShell)
./myfile:执行myfile

详细来说,. 本身就是一个命令(并且 myfile 作为参数传递给它),其中 ./ 是文件的(相对)路径。执行 ./myfile 时,您正在执行 myfile,这是一个可执行文件,位于您的当前目录中。

话虽这么说,当你想执行一些像 a.out 这样的可执行文件时(我假设它是 C 或 C++ 可执行文件或类似的东西)你输入 ./a.out.
当你在 "text" 文件中有一堆命令并且你想要你的 shell 到 运行 那些,你输入 . myfile。最深刻的例子可能是当您更改 .bashrc.profile 文件的内容并且您想要 "apply" 对系统所做的更改时。

最后,不要将 . 命令与 . 混淆,后者是您当前的目录(如 ls -a 的第一个结果)

. a.out

这段代码将在当前终端中使用 bash 执行 a.out 中存在的 shell 脚本。

./a.out

这段代码不执行任何命令。 (.) 文件前的点运算符表示隐藏文件 [例如:.a.out]。同样 (./) 表示当前工作目录中存在的文件夹。例如:

cd ./documents

以上代码会将您的目录更改为文档。