我的程序无法运行并显示“找不到命令”错误


15

我刚刚从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

我做错了哪一步?


不要忘记使其可执行,请使用sudo chmod 777 a.out
Nick Shvelidze

@NickShvelidze编译器几乎总是+x为您设置;您不需要chmod编译器生成的可执行文件。gcc无法使其可执行的唯一常见情况是在不支持或不允许的文件系统中创建文件(在这种情况下chmod,此后立即也会失败)。另外,777应避免。无需使所有用户可读,可写和可执行该文件;如果必要运行chmod,那就chmod +x a.out足够了。
伊莱亚·卡根

Answers:


33

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

说明

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

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


1
为了进一步详细说明,“ ./”用作“就在这里”命令。这有点多余,但是从某种意义上说很有用,因为您知道自己将执行某件事。
鲁宾·巴克

1
您可能还需要chmod u+x a.out允许系统执行它。
查理斯布里奇

现在,我用“ ./”得到它。该程序无需chmod即可正常运行。谢谢。
yihangho 2012年

1
@yihang:请考虑通过单击您最喜欢的答案左侧的灰色/绿色圆圈,将此问题标记为已回答。
拉斐尔·谢拉克(RafałCieślak)2012年

@Ruben Bakker:实际上,这并不是多余的。与Windows不同,Linux不会默认查看当前或默认目录。因此,如果它不在路径中,则无论目录是什么,都需要指定目录。
马蒂·弗里德

9

当您在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

2
如果确实要添加.PATH,请始终最后添加。
muru 16-10-20,7

3

本质上,默认情况下会创建a.out,因为您没有为可执行文件指定名称。尝试以下方法:

gcc HelloWorld.c -o HelloWorld

完成此操作后,您应该能够(如Sunil所建议的那样)使用点斜杠(./)开头“ HelloWorld”:

./HelloWorld

这是文章的链接,该文章稍微解释了为什么创建a.out的原因:在Linux上编写和编译C程序

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.