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

yih*_*gho 19 command-line gcc c

我刚刚从 Windows 切换到 Ubuntu 11.10。

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

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

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

cd Documents

gcc HelloWorld.c
Run Code Online (Sandbox Code Playgroud)

一个名为 a.out 的文件,在谷歌上搜索后,就是可执行文件。我输入了这个命令:

a.out
Run Code Online (Sandbox Code Playgroud)

但我得到

a.out: command not found
Run Code Online (Sandbox Code Playgroud)

我哪一步做错了?

小智 39

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

解释

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

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

  • 为了进一步详细说明,“./”用作“就在此处”命令。这有点多余,但在您知道将要执行某些操作的意义上很有用。 (2认同)

ams*_*ams 10

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

通常它看起来像这样:

PATH=/usr/local/bin:/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)

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

事实上,这在 DOS/Windows 上非常相似:有一个名为的变量%PATH%执行完全相同的操作。

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

如果您愿意,可以通过添加.到路径使 Linux 以相同的方式工作:

PATH=.:$PATH
Run Code Online (Sandbox Code Playgroud)

(也就是说设置PATH.:加上 的现有内容$PATH。)

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

PATH=.:/usr/local/bin:/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)

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

./myprog
Run Code Online (Sandbox Code Playgroud)

或者

/home/username/myprog
Run Code Online (Sandbox Code Playgroud)

  • 如果你将 `.` 添加到 `PATH`,**总是**最后添加它。 (2认同)