无法运行C程序:" a.out:命令未找到"

时间:2014-04-11 23:08:14

标签: terminal sh

我已经在C中编写了我的第一个程序。我编译了它并在桌面上放了一个名为a.out的文件(正如我正在阅读的书告诉我应该的那样),但是当我输入命令{{ 1}}进入终端然后运行它a.out。为什么这么说?

根据Stephen Kochan的书“Programming in C”,我所做的是正确的,因为我在正确的目录(桌面),我相信。它还说如果文件不在正确的路径中,我可以将其添加到路径或运行-bash: a.out: command not found,此方法可以运行并运行程序,为什么会这样?

2 个答案:

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