我有一个简单的hello_world.c
文件这里。我想出了如何去做。
gcc -Wall -g hello_world.c -o hello
正在工作,但是如果我运行bash hello
就会出现错误:hello: hello: cannot execute binary file
sh hello
然后错误:hello: 1: Syntax error: "(" unexpected
./hello
打印出预期的行。
我以为这三个都是一样的。从结果看不是。为什么另外两个不工作?除此之外./hello
,还有其他方法来调用该文件吗hello
?
答案1
前两次尝试bash hello
和sh hello
,您试图说服这些 shell(分别是bash
和sh
)该hello
文件是 shell 可执行文件。由于它是二进制文件,因此 shell 不知道如何处理被告知运行它的信息,因此它们会向您提供这些错误消息。第三个示例,您将hello
二进制文件作为二进制文件运行,就像 shell 期望的那样运行。它./
只是一个指示符,指示可以在当前目录 ( .
) 中找到二进制文件的位置。为什么需要./
?大多数时候,“当前工作目录”不是变量的一部分$PATH
,因此简单地运行hello
不会在任何地方找到可执行文件。
答案2
为什么我们使用 ./(点斜线)来运行 Linux 脚本?
Unix ./脚本语法可以分三部分解释:
Linux 中应用程序 PATH 的作用 ./ 表示法表示当前目录 需要避免与现有命令冲突
Unix 的点斜杠与 PATH 每台计算机都有一个应用程序路径。这是调用可执行命令或可运行脚本时操作系统查找的目录集合。
您熟悉的所有内置命令(例如 ls、cat、echo、touch 和 chmod)都位于应用程序 PATH 中。用户通常也将JDK或Git中常用的程序也放在应用程序PATH中。
问题是,如果您尝试调用自己编写的脚本,它可能不会保存在属于应用程序路径的文件夹中。这意味着如果您像运行 PATH 上的命令一样运行自定义脚本,Linux 操作系统将找不到它。
Linux 中 ./ 的含义 这就是点斜杠 ./ 符号出现的地方。它的意思是“在当前目录中查找”。当您使用 ./ 时,您告诉 Ubuntu、Fedora、SUSE 或您使用的任何 Linux 发行版在当前目录中查找您希望运行的命令,并完全忽略应用程序 PAT 上的内容