我有一个来自这里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
吗?
前两次尝试
bash hello
和sh hello
,您试图说服那些 shell(bash
和sh
分别)该hello
文件是 shell 可执行文件。因为它是一个二进制文件,shell 不知道如何处理被告知运行它,所以它们会给你那些错误消息。第三个示例,您将hello
二进制文件作为二进制文件运行,这是 shell 期望它运行的方式。这./
只是一个指示可以在当前目录中找到二进制文件的位置 (.
)。为什么需要./
? 大多数时候,“当前工作目录”不是$PATH
变量的一部分,所以简单地运行hello
不会在任何地方找到可执行文件。为什么我们使用 ./(点斜杠)来运行 Linux 脚本?
Unix ./ 脚本语法可以分为三个部分来解释:
Linux 中应用程序 PATH 的作用 ./ 符号表示当前目录 需要避免与现有命令冲突
Unix 的点斜杠与 PATH 每台计算机都有一个应用程序 PATH。这是调用可执行命令或可运行脚本时操作系统查找的目录集合。
您熟悉的所有内置命令,例如 ls、cat、echo、touch 和 chmod,都在应用程序 PATH 上。用户经常将JDK或Git中常用的程序也放在应用程序的PATH上。
问题是,如果您尝试调用自己编写的脚本,它可能不会保存在应用程序 PATH 中的文件夹中。这意味着如果您像运行 PATH 上的命令一样运行自定义脚本,Linux 操作系统将找不到它。
Linux 中 ./ 的含义 这是点斜杠 ./ 符号的来源。它的意思是“查看当前目录”。当你使用 ./ 时,你告诉 Ubuntu、Fedora 或 SUSE 或任何你正在使用的 Linux 发行版在当前目录中查找你想要运行的命令,并完全忽略应用程序 PAT 上的内容