我已经在C中编写了我的第一个程序。我编译了它并在桌面上放了一个名为a.out
的文件(正如我正在阅读的书告诉我应该的那样),但是当我输入命令{{ 1}}进入终端然后运行它a.out
。为什么这么说?
根据Stephen Kochan的书“Programming in C”,我所做的是正确的,因为我在正确的目录(桌面),我相信。它还说如果文件不在正确的路径中,我可以将其添加到路径或运行-bash: a.out: command not found
,此方法可以运行并运行程序,为什么会这样?
答案 0 :(得分:21)
当您键入命令名称(a.out
与此方面的任何其他命令名称没有区别)时,shell将搜索具有该名称的可执行文件。它使用存储在$PATH
环境变量中的目录名列表执行此搜索。
您可以通过输入
来查看当前的$PATH
echo $PATH
在你的shell提示符下。典型值可能类似于
/usr/bin/:/bin
虽然你可能还有一些额外的目录。
由于a.out
位于当前工作目录(键入pwd
以查看该目录),并且您当前的工作目录可能不在您的{{ 1}},你不能只输入$PATH
来执行它。
由于您可以将当前目录称为a.out
,因此您可以(并且应该)通过键入
.
注意:可以在./a.out
中拥有.
,但这样做是个坏主意,因为它太容易让人意外地执行随机命令。如果$PATH
位于.
的前面,请假设我要求$PATH
到我的目录并输入cd
- 但我已经安装了一个名为{的文件{1}}做了一件令人讨厌的事。将ls
放在ls
的 end 可以减轻这种风险,但并不能完全消除它。如果要从当前目录执行文件名,最好养成使用.
前置文件名的习惯。
(我忽略了别名,函数和shell内置命令也可以这种方式执行的事实。)
答案 1 :(得分:6)
您需要输入./a.out
。 ./
告诉bash在当前目录中查找文件a.out
(点 - .
- 指向当前目录。)
如果您在bash中键入a.out
而未指定目录,则会通过$PATH
变量中的目录搜索它(如果您有兴趣查看这些目录,请运行{{1} })。因此,您可以告诉它运行当前目录中的文件,也可以将当前目录(或桌面目录)添加到echo $PATH
。