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

Dan*_*yle 7 c bash shell executable

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

. a.out
Run Code Online (Sandbox Code Playgroud)

...导致此错误:

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

但是,运行以下命令:

./a.out
Run Code Online (Sandbox Code Playgroud)

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

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

dbu*_*ush 18

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

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

在第二个示例中,要运行的命令是./a.out,这意味着运行a.out驻留在当前目录中的文件.

  • 我认为`source`是`.`的非便携式快捷方式,而不是相反. (2认同)

Ron*_*eau 6

  • ./program运行一个名为program位于当前工作目录(./)的文件( shell脚本的新shell中).
  • .在当前shell中source运行shell脚本相同.不像,它不能用于运行二进制文件!例如,您可以使用此命令来运行shell脚本,因为您希望此脚本修改当前的shell../program.bashrc

  • FYI`source`是`.`的不可移植别名 (2认同)