无法运行C程序:"a.out:command not found"

Jus*_*tin 14 terminal sh

我已经在C中编写了我的第一个程序.我编译了它并在桌面上放了一个文件a.out(正如我正在阅读的那本书告诉我应该的那样),但当我在a.out终端输入命令并运行它时,它说-bash: a.out: command not found.为什么这么说?

根据Stephen Kochan的书"Programming in C",我所做的是正确的,因为我在正确的目录(桌面),我相信.它还说如果文件不在正确的路径中我可以将它添加到路径或运行./a.out,这个方法工作并运行程序,为什么这样?

Kei*_*son 25

当您键入命令名称(a.out在这方面与任何其他命令名称没有区别)时,shell将搜索具有该名称的可执行文件.它使用存储在$PATH环境变量中的目录名列表执行此搜索.

您可以$PATH通过键入来查看当前的内容

echo $PATH
Run Code Online (Sandbox Code Playgroud)

在你的shell提示符下.典型值可能是这样的

/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)

虽然你可能还有一些额外的目录.

由于a.out在您当前的工作目录(类型pwd以查看目录是什么),并且您当前的工作目录可能不在您的中$PATH,因此您无法通过键入来执行它a.out.

由于您可以将当前目录称为.,您可以(并且应该)通过键入来执行命令

./a.out
Run Code Online (Sandbox Code Playgroud)

注意:您可以.你的$PATH,但它被认为是一个坏主意,这样做,因为这使得它太容易不小心执行随机命令.如果.位于你的前面$PATH,想象一下我要求你到cd我的目录并输入ls- 但我已经安装了一个叫做的文件ls做了一件令人讨厌的事情.把.结束你的$PATH的缓解这种风险,但并不能消除它完全../如果要从当前目录执行文件名,最好养成在文件名前面的习惯.

(我忽略了别名,函数和shell内置命令也可以这种方式执行的事实.)


Nem*_*ric 6

你需要输入./a.out.这./告诉bash a.out在当前目录中查找文件(点 - .- 指向当前目录).

如果你键入a.outbash而不指定目录,它将通过$PATH变量中的目录搜索它(如果你有兴趣看到这些,运行echo $PATH).因此,您可以告诉它运行当前目录中的文件,也可以将当前目录(或桌面目录)添加到$PATH.