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

时间:2018-02-08 17:45:06

标签: c bash shell executable

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

. a.out

...导致此错误:

  

bash:。:a.out:无法执行二进制文件

但是,运行以下命令:

./a.out

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

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

6 个答案:

答案 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

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