我的程序无法运行,出现“未找到命令”错误

我的程序无法运行,出现“未找到命令”错误

我刚刚从 Windows 切换到 Ubuntu 11.10。

我使用文本编辑器用 C 语言编写了以下代码,并将其保存为 Documents 中的 HelloWorld.c。

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

我启动了终端并输入以下命令:

cd Documents

gcc HelloWorld.c

一个名为 a.out 的文件,经过 Google 搜索后,发现它是可执行文件。我输入了以下命令:

a.out

但我明白

a.out: command not found

我到底哪一步做错了?

答案1

由于您正在当前工作目录中运行可执行文件,因此应该在其前面加上./。因此对于您的程序,请将其作为 运行./a.out

解释

终端在 中搜索可执行文件$PATH。这是一个 Unix环境变量列出包含系统二进制文件的目录(例如lsechogcc)。如果你调用一个可执行文件,不是$PATH目录中(例如a.out),需要指明其在文件系统中的绝对路径。

在终端中.是当前工作目录的同义词,因此./a.out。您也可以同样调用/home/yihang/Documents/a.out

答案2

当您在 Linux 上运行命令时,它会搜索环境变量中列出的所有目录PATH,如果在那里找不到该命令,那么您就会收到所看到的消息。

通常它看起来像这样:

PATH=/usr/local/bin:/usr/bin:/bin

这意味着它将首先在 中查找/usr/local/bin。如果它在那里找不到它,它将在 中查找/usr/bin,依此类推。

事实上,这在 DOS/Windows 上非常相似:有一个名为的变量%PATH%可以做完全相同的事情。

不同之处问题是,在 Windows 上,当前目录也会被搜索。Unix 认为这很糟糕,因为本地文件(例如恶意软件)可能会意外覆盖重要的系统程序。

但是,如果您愿意,您可以通过.在路径中添加以下内容使 Linux 以相同的方式工作:

PATH=.:$PATH

(这表示设置PATH.:加上 的现有内容$PATH。)

最终看起来像这样(在您的机器上可能会有所不同):

PATH=.:/usr/local/bin:/usr/bin:/bin

如果您不想这样做,您可以通过明确指定目录来运行每个程序:

./myprog

或者

/home/username/myprog

答案3

本质上,由于您没有指定可执行文件的名称,因此默认创建了 a.out。请尝试以下操作:

gcc HelloWorld.c -o HelloWorld

完成此操作后,您应该能够通过在“HelloWorld”前面加上点斜杠 (./) 来调用它(如 Sunil 所建议的那样):

./HelloWorld

以下是一篇文章的链接,其中稍微解释了一下创建 a.out 的原因:在 Linux 上编写和编译 C 程序

相关内容