运行此命令(其中a.out
是有效的C可执行文件):
. a.out
...导致此错误:
bash:。:a.out:无法执行二进制文件
但是,运行以下命令:
./a.out
...成功执行C二进制可执行文件。
显然,这里有两种类型的执行,有什么不同?
答案 0 :(得分:16)
shell使用空格来分隔要运行的命令及其参数。
在第一个示例中,要运行的命令为.
,参数为a.out
。 .
命令是source
的shell快捷方式,它将包含shell命令的文件的名称作为其第一个参数,并在当前shell中运行这些命令。此命令失败,因为a.out
是二进制文件,而不是shell脚本。
在第二个示例中,要运行的命令是./a.out
,这意味着运行驻留在当前目录中的文件a.out
。
答案 1 :(得分:6)
allowRestrictedHeaders
运行位于当前工作目录(./program
)中的名为program
的文件(对于shell脚本,在新shell中)。./
与source
相同,后者在您当前的shell中运行shell脚本 。与.
不同,它不能用于运行二进制文件!例如,您可以使用此命令运行./program
shell脚本,因为您希望此脚本修改当前shell 。答案 2 :(得分:4)
第一个运行import csv
mydata = [["This, is, a, test, row"],
["This is, another test, row, my, dude"],
["100, 200, 300, 400, 500"]]
with open('test.csv', 'w') as target:
writer = csv.writer(target, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
writer.writerows(mydata)
(点)命令,其中.
为其参数。 dot命令的工作是将文本文件解析为在当前shell环境中执行的命令。它会给您一个错误,因为a.out
不是文本文件。
第二个执行a.out
,意思是“当前目录中名为./a.out
的程序。
答案 3 :(得分:2)
.
是source
命令。它读取一个文件并在当前shell中逐行执行 - 正如您所见,它不适用于二进制可执行文件(而不是脚本)。
在路径的上下文中,例如./
,.
代表当前目录。所以./a.out
意味着"在当前目录中运行文件a.out"。
答案 4 :(得分:2)
正如大家所说:
. myfile
:执行来自myfile
的命令。 (就像中的source
命令一样
C Shell)
./myfile
:执行myfile
详细说明,.
本身就是一个命令(并且myfile
作为参数传递给它),其中./
是文件的(相对)路径。执行./myfile
时,您正在执行myfile
这是一个可执行文件,位于当前目录中。
话虽如此,当你想执行一些像a.out
这样的可执行文件(我假设它是C或C ++可执行文件或类似文件)时,你输入./a.out
。
如果在“文本”文件中有大量命令,并且希望shell运行这些命令,则键入. myfile
。最深刻的例子可能是当您更改.bashrc
或.profile
文件的内容并且您想要将更改“应用”到系统时。
最后,不要将.
命令与.
混淆,这是您当前的目录(如ls -a
的第一个结果中所示)
答案 5 :(得分:2)
. a.out
这段代码将使用当前终端中的bash执行a.out中存在的shell脚本。
./a.out
这段代码不执行任何命令。 (。)文件表示隐藏文件之前的点运算符[例如:.a.out]。类似地(./)表示当前工作目录中存在的文件夹。例如:
cd ./documents
上面的代码会将您的目录更改为文档。