我编写了一个名为main.c的愚蠢的“hello world”C程序:
gcc main.c
正如所料,出现了一个名为a.out的文件,他们说这是一个可执行文件。如果我输入
,则从同一目录中a.out
然后点击Enter,它说“找不到命令”。但如果我输入
./a.out
根据需要说“你好世界”。我从来没有见过一个可执行文件,它需要在它前面运行'./'。为什么现在?
答案 0 :(得分:2)
PATH
以外的所有可执行文件都需要从根/
或本地目录./
运行显式路径。快速搜索会在其他线程中出现基本相同的问题:
Why do you need ./ (dot-slash) before script name to run it in bash?
这也有助于在shell中自动完成(假设它支持它)。如果只键入 a 选项卡 选项卡,它将列出路径中的每个可执行文件,以“a”开头。但是,如果您键入。 / a Tab ,它可能会自动完成为a.out
因为它只会查看当前目录中以“a”开头的可执行文件。因此,以这种方式查看,“。/”实际上保存您键入了几个键!
答案 1 :(得分:0)
那是因为a.out
不在$PATH
您提供的命令由shell在$PATH
(environment variable in linux)中搜索。
$ PATH基本上是目录列表。当您提供可执行文件名时,shell会在$PATH
提供的目录中搜索它。
由于a.out
不在$PATH
中,您必须明确提供a.out的路径。
答案 2 :(得分:0)
Unix和Linux的标准做法是不要在路径中包含当前的工作目录。如果您想要MSDOS / Windows行为,请更改PATH变量以包含.
作为第一个目录。
答案 3 :(得分:0)
这是因为系统正在寻找a.out或任何其他exec。文件在一些特殊的路径。默认情况下,当前dir不在该列表中(通常)。
查看此类路径的列表:
$ env|grep PATH
你可以将这样的当前目录添加到PATH环境中。变量:
$ export PATH=$PATH:.
但你最好避免这样做并运行 ./ a.out 。 这样的技术。让我们了解我们正在运行当前目录中的指定文件, 不是另一个(可能)目录中具有相同名称的其他文件。所以,我们知道我们到底跑了什么。
答案 4 :(得分:0)
当您在Linux终端中键入类似a.out
的内容时,您暗示您要运行名为a.out
的命令。默认情况下,终端不会在当前目录中查找这些命令,它会查找PATH
- 可执行程序的一组目录。通常是这些目录:
/bin
/usr/bin
/usr/local/bin
echo $PATH
)如果程序不在directory
的某个目录中,则必须指定程序的PATH
目录才能运行。例如:
./a.out
有效,因为.
指的是您所在的目录../a.out
位于父目录中,则{li> a.out
可以正常工作(..
引用父目录)
目录
projectdir/a.out
也可以,如果您的程序在子目录中,projectdir