我的程序无法运行“command not found”错误

我刚刚从Windows切换到Ubuntu 11.10。

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

#include  int main() { printf("Hello World!\n"); return 0; } 

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

 cd Documents gcc HelloWorld.c 

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

 a.out 

但我明白了

 a.out: command not found 

我做错了哪一步?

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

说明

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

在终端. 是当前工作目录的同义词,因此./a.out 。 你也可以/home/yihang/Documents/a.out称呼/home/yihang/Documents/a.out

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

实际上,默认情况下会创建a.out,因为您没有为可执行文件指定名称。 试试这个:

 gcc HelloWorld.c -o HelloWorld 

一旦你这样做,你应该能够通过(像Sunil所建议的那样)使用点斜杠(./)来预告“HelloWorld”:

 ./HelloWorld 

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