[英]Compiling and executing c program in bash script not working because the compiled program is not found
[英]Executing a compiled C program
我编译了一个名为main.c的愚蠢的小“hello world”C程序:
gcc main.c
正如所料,出现了一个名为a.out的文件,他们说这是一个可执行文件。 如果我键入,从同一目录
a.out
并按Enter键,它说“找不到命令”。 但如果我输入
./a.out
它根据需要说“你好世界”。 我从来没有见过一个可执行文件,它需要在它前面运行'./'。 为什么现在?
不在PATH
所有可执行文件都需要从root /
或本地目录./
运行的显式路径。 快速搜索以其他基本相同的问题呈现其他线程:
为什么在脚本名称之前需要./(dot-slash)才能在bash中运行它?
这也有助于在shell中自动完成(假设它支持它)。 如果只键入一个 选项 卡 选项 卡 ,它将列出路径中以“a”开头的每个可执行文件 。 但是,如果你输入。 / 制表它将可能只是自动为a.out
,因为它会只在当前目录下的可执行文件从“a”。 因此,以这种方式看,“。/”实际上可以节省您键入几个键!
那是因为a.out
不在你的$PATH
。
您提供的命令由shell在$PATH
( linux中的环境变量)中搜索。
$ PATH基本上是目录列表。 当您提供可执行文件名时,shell会在$PATH
提供的目录中搜索它。
由于a.out
不在$PATH
,因此您必须明确提供a.out的路径。
在Unix和Linux中,标准做法是不要在路径中包含当前的工作目录。 如果要进行MSDOS / Windows行为,请将PATH变量更改为include .
作为第一个目录。
这是因为系统正在寻找a.out或任何其他高管。 文件在一些特殊的路径。 并且当前dir默认不在该列表中(通常)。
看一下这样的路径列表:
$ env|grep PATH
你可以添加这样的当前目录到PATH环境。 变量:
$ export PATH=$PATH:.
但你最好避免这样做并运行./a.out 。 这样的技术。 让我们了解我们正在从当前目录运行指定文件,而不是从另一个(可能)目录运行具有相同名称的其他文件。 所以,我们知道我们到底跑了什么。
当您在Linux终端中输入类似a.out
,您暗示您要运行名为a.out
的命令。 默认情况下,终端不查看当前目录中的这些命令,它查找PATH
- 一组可执行程序的目录。 通常是这些目录:
/bin
/usr/bin
/usr/local/bin
echo $PATH
来检查它们) 如果它不在PATH
某个目录中,则必须指定程序的directory
目录才能运行它。 例如:
./a.out
作用是因为.
指的是你所在的目录 a.out
在父目录( ..
指的是父目录)中,则../a.out
可以工作 projectdir/a.out
也适用,如果你的程序是在子目录, projectdir
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.