什么是'shebang'线?

What is a 'shebang' line?

本文关键字:shebang 什么      更新时间:2023-10-16

目前我正尝试在我的新Mac上开始编程。我安装了TextWrangler,并选择了c++作为我的首选语言;因为我从使用Windows时就对它有所了解。

所以,我写了一个非常普通的"Hello World"程序。虽然,当我试图运行它时,我得到了一个错误:

"此文件似乎不包含有效的' shebang '行(应用程序错误码:13304)"

我试着搜索错误代码来找出如何解决这个问题,但我找不到任何东西。我不知道什么是"shebang"线…有人能帮我一下吗?

你需要先用编译器编译它。我假设您尝试像./source那样运行源文件,但c++不这样工作。

然而,对于某些编译器,您可以提供shebang-line作为源文件的第一行(#!被称为shebangcrunchbang,因此名称),如下所示:
#!/path/to/compiler

这样shell就知道使用什么应用程序来运行这种类型的文件,当您尝试自己运行源文件时,编译器将为您编译并运行它。这是一个依赖于编译器的特性,所以我建议直接用g++或其他mac电脑用来编译可执行文件,然后运行它。

虽然我不推荐它用于常规的c++开发,但我使用一个简单的shell脚本包装器来编写小型c++实用程序。下面是一个Hello World示例:

#if 0  // -- build and run wrapper script for C++ ------------------------------
TMP=$(mktemp -d)
c++ -o ${TMP}/a.out ${0} && ${TMP}/a.out ${@:1} ; RV=${?}
rm -rf ${TMP}
exit ${RV}
#endif // ----------------------------------------------------------------------
#include <iostream>
int main(int argc, char *argv[])
{
  std::cout << "Hello world" << std::endl;
  return 0;
}

它确实显示您正在尝试直接运行源文件,但是您需要使用c++编译器进行编译,例如gcc (GNU编译器集合)中包含的包含Mac的c++编译器g++。它不包含在Mac中,您必须先下载它:

from http://www.tech-recipes.com/rx/726/mac-os-x-install-gcc-compiler/: "要安装gcc编译器,请从http://connect.apple.com/下载xcode包。你需要注册一个Apple Developer Connection帐户。注册后,登录并单击下载软件,然后单击开发人员工具。找到Xcode Tools (version) - CD Image旁边的下载链接,然后点击它!"

安装后,如果您想要快速打开Hello World,那么在源文件目录下的终端窗口中,您可以执行命令g++ HelloWorld.cpp -o HelloWorld。然后,您应该能够将其作为./HelloWorld运行。

另外,如果你来自Visual Studio世界,你可能想尝试一下Mono和MonoDevelop。Mono是c#(和其他语言)的免费实现,而MonoDevelop是一个与Visual Studio非常相似的IDE。MonoDevelop支持c#和其他。net语言,包括Visual Basic。net,以及C/c++开发。我没有广泛地使用它,但它似乎与VS非常相似,所以你不需要在一天内学习新的东西。我还使用过KDevelop,我在使用它的时候非常喜欢它,尽管现在已经有一段时间了。它在C/c++中对gnu风格的开发有很多支持,而且在我的记忆中非常强大。

祝你好运!

链接:

  • Mono: http://mono-project.com/Main_Page
  • MonoDevelop: http://monodevelop.com/
  • KDevelop: http://kdevelop.org/

shebang is http://en.wikipedia.org/wiki/Shebang_%28Unix%29.

不确定为什么您的程序没有运行。您将需要编译和链接以生成可执行文件。

我发现令人困惑(/有趣)的是c++程序给出"Shebang line"错误。Shebang行是类Unix操作系统指定应该使用哪个程序来解释文件其余部分的一种方式。shebang线通常指向解释器的路径。c++是编译语言,没有解释器。

要获得shebang行如何工作的真正技术细节,执行man execve并在这里在线获取该手册页- man execve。

如果你在mac上,那么在命令行上做这样的操作:

g++ -o program program.cpp

将编译并链接你的程序到一个名为program的可执行文件。然后你可以像这样运行它:

./program

你得到'shebang'错误的原因可能是因为你试图像这样运行cpp文件:

./program.cpp

shell试图找到一个解释器来运行文件中的代码。因为这是c++,所以没有相关的解释器但如果你的文件包含Python或Bash那么像这样的行

#!/usr/bin/python

源文件第一行的

将告诉shell使用python解释器

以如下模式开头的行:#!/…/…/…叫做shebang线。换句话说,shebang是由数字、符号和感叹号(#!)组成的字符序列。在类unix操作系统中,当将带有shebang的文本文件当作可执行文件使用时,程序加载器机制将文件初始行的其余部分解析为解释器指令。加载器执行指定的解释器程序,将试图运行脚本时最初使用的路径作为参数传递给它,以便程序可以使用该文件作为输入数据。