之间有什么区别。和 ./ 在 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
以上代码会将您的目录更改为文档。
运行 此命令(其中 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
以上代码会将您的目录更改为文档。