问题标签 [shebang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4692 浏览

python - Python 部署和 /usr/bin/env 可移植性

在我所有可执行 Python 脚本的开头,我放了shebang行:

我在env python产生 Python 2.2 环境的系统上运行这些脚本。我的脚本很快就失败了,因为我手动检查了兼容的 Python 版本:

如果可能的话,我不想更改每个可执行文件上的 shebang 行;但是,我没有对机器的管理访问权限来更改结果,env python并且我不想强制使用特定版本,如:

我想避免这种情况,因为系统可能有比 Python 2.4 更新的版本,或者可能有 Python 2.5 但没有 Python 2.4。

什么是优雅的解决方案?

[编辑:]我在提出问题时不够具体——我想让用户在没有手动配置的情况下执行脚本(例如路径更改或符号链接~/bin并确保您的 PATH~/bin在 Python 2.2 路径之前具有)。也许需要一些分发实用程序来防止手动调整?

0 投票
4 回答
2018 浏览

windows - 对于 ruby​​/webrick,我需要 windows 来识别 shebang (#!) 符号

(请耐心等待,我保证这会到达 shebang 和 windows。)

我将最简单的 WEBRick 服务器放在一起:

再简单不过了。这个基本服务器确实接受 http 连接(firefox、internetexplorer、wget、TELENT)并适当地处理它们,只要我只是获取静态文档。但是,如果我将目录中的一个文件设置为具有 .cgi 扩展名,我会在服务器终端上得到 500 和以下信息:

我在命令行上做了一些事情来模仿 cgi_runner.rb 第 45 行发生的事情

显然,WEBrick 尚未获准登陆 Windows。您通常对公司偏执的头痛使我无法修改 webrick,所以我可以在 c:/rubyCGI/test.cgi 中获得操作系统(windows)识别的 shebang 表示法,这样我就不必每次都明确告诉它要使用哪个解释器采用? 我可以将所有 .cgi 文件分配为与 ruby​​ 相关联,但从长远来看,这会受到限制。

更新:自从发布此内容后,我想到可能根本无法从 ruby​​ 运行 cgi Web 服务器;ruby 没有分叉支持。由于无法派生进程,cgi 服务器将不得不一次执行每个 cgi 脚本,在第一个完成时忽略所有并发请求。虽然这对某些人来说可能是可以接受的,但它不适用于我的应用程序。尽管如此,我仍然对我最初的问题的答案非常感兴趣——让 shebang 在 windows 下工作。

0 投票
2 回答
6120 浏览

linux - /usr/bin/env 关于 shebang 线特性的问题

问题

  • 如果将 shell 脚本插入 shebang 行,内核会做什么?
  • 内核如何知道要启动哪个解释器?

说明

我最近想围绕/usr/bin/env编写一个包装器,因为我的 CGI 环境不允许我设置PATH变量,但全局除外(这当然很糟糕!)。

所以我想,“好的。让我们设置 PREPENDPATH 并将PATH设置在 env 的包装器中。”。生成的脚本(此处称为env.1)如下所示:

看起来应该可以。在设置 PREPENDPATH 后,我检查了它们的反应:

看起来绝对完美!到现在为止还挺好。但是看看“Hello World!”会发生什么。

我想我错过了一些关于 UNIX 的基本知识。

即使查看了原始env的源代码,我也很迷茫。它设置环境并启动程序(或者在我看来......)。

0 投票
6 回答
9279 浏览

python - Python 源码头注释

什么是线

在用于的python脚本的第一行?

0 投票
8 回答
12418 浏览

linux - 文件开头的 #!/usr/bin/... 是什么意思?

我可以在 Haskell 中做这样的事情:

然后我可以运行它./hello.hs

我的问题是,为什么第一行被忽略了?haskell 中的注释以开头,--但第一行似乎仍然被忽略。它甚至加载到 ghci 中。这个技巧也适用于 Python 和 Perl。

但是当我在 Java 中做类似的事情时:

Javac 给了我一个编译器错误。

那么这是如何工作的,我如何让它与 Java 一起工作呢?

谢谢。

0 投票
4 回答
14202 浏览

shell - 使用参数 (vars) 调用具有 awk shebang 的脚本

我有一个这样定义的 awk 脚本:

我已将其保存为columns并保存了chmod +x它。我想调用它,以便在它遍历文件时定义它startend我在想这应该可行:

但事实并非如此。帮助!

0 投票
2 回答
797 浏览

linux - “: 找不到命令”

采购一个 env 文件时会出现一些问题(一系列变量导出)

例如:

结果是

=> "/bin" 似乎覆盖了变量的开头而不是后缀..

任何的想法?

顺便说一句,每次我们 source 这个文件时,都会报错:

这很奇怪.. 即使我们评论了它的全部内容,也会出现这条消息。

开始时调用的 shell 看起来不错#!/bin/sh,或者#!/bin/bash.

控制字符呢?如何在Linux上筛选它们?

0 投票
2 回答
482 浏览

ruby - OS X shebang问题上的Rubygame

我在玩 Rubygame。我用 Mac Pack 安装了它,现在我有了 rsdl 可执行文件。rsdl game.rb工作正常,但是当我 chmod +x rb 文件时,将 shebang 添加到 rsdl(尝试直接路径和 /usr/bin/env rsdl)并尝试执行它(./game.rb),它开始在终端和 rsdl 之间闪烁试图打开,最终放弃并给出了一个bus error。有谁知道是什么原因造成的?如果它有所作为,我会使用 Snow Leopard (10.6.2)。

谢谢。

0 投票
8 回答
7139 浏览

windows - 如何使用 Apache 2 在 Windows 上忽略 Perl shebang?

我已经在我的 Windows 机器上设置了一个本地 Perl Web 环境。我正在处理的应用程序最初来自 Linux 服务器,因此源.pl文件的 shebang 如下所示:

这会在我的 Windows 开发机器上导致以下错误:

是否可以更改我的 Apache 2 conf,以便在我的 Windows 机器上忽略 shebang?当然,我可以将 shebang 设置为#!c:\perl\bin\perl.exe,这很明显;但问题在于部署更新的文件。显然,在每次部署时将其改回是非常不方便的。我在 Windows 7 上使用ActivePerl 。

更新:

我应该提到我需要保留 shebang,以便脚本可以在我们的共享托管 Linux 生产服务器上运行。如果我没有这个约束并且我不必使用 shebang,那么显而易见的答案就是不使用它。

0 投票
2 回答
1219 浏览

python - 从同一个批处理文件中读取批处理文件的第一行?

我有一个批处理文件,它试图运行第一行中指定的程序。类似于 Unix 的shebang

我想知道的是:有没有办法自动设置%PYTHON%C:\Python27\python.exeshebang()之后的脚本第一行中指定的值#!

背景:我正在尝试这样做,以便在包装脚本中明确指定要调用的 Python 解释器(因为系统上安装了多个 Python 解释器)。

假设:您可以假设脚本已经知道它自己的文件名(foo)并且%~dp0是该脚本的目录。我们如何阅读不包括 shebang 的第一行?

澄清:将 C:\PythonXY 添加到 %PATH% 不是解决方案。shebang 行应该在用户机器上的安装期间进行修改(原始脚本仅在构建机器上生成).. 可能有多个相同版本的 Python 安装。并且只有 shebang 行是可修改的(这就是程序的工作方式)。