我的程序无法运行“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 环境变量 ,它列出了包含系统二进制文件的目录(例如ls
, echo
或gcc
)。 如果调用不在 $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程序 。