问题标签 [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.
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 路径之前具有)。也许需要一些分发实用程序来防止手动调整?
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 下工作。
linux - /usr/bin/env 关于 shebang 线特性的问题
问题:
- 如果将 shell 脚本插入 shebang 行,内核会做什么?
- 内核如何知道要启动哪个解释器?
说明:
我最近想围绕/usr/bin/env编写一个包装器,因为我的 CGI 环境不允许我设置PATH变量,但全局除外(这当然很糟糕!)。
所以我想,“好的。让我们设置 PREPENDPATH 并将PATH设置在 env 的包装器中。”。生成的脚本(此处称为env.1)如下所示:
看起来应该可以。在设置 PREPENDPATH 后,我检查了它们的反应:
看起来绝对完美!到现在为止还挺好。但是看看“Hello World!”会发生什么。
我想我错过了一些关于 UNIX 的基本知识。
即使查看了原始env的源代码,我也很迷茫。它设置环境并启动程序(或者在我看来......)。
python - Python 源码头注释
什么是线
在用于的python脚本的第一行?
linux - 文件开头的 #!/usr/bin/... 是什么意思?
我可以在 Haskell 中做这样的事情:
然后我可以运行它./hello.hs
我的问题是,为什么第一行被忽略了?haskell 中的注释以开头,--
但第一行似乎仍然被忽略。它甚至加载到 ghci 中。这个技巧也适用于 Python 和 Perl。
但是当我在 Java 中做类似的事情时:
Javac 给了我一个编译器错误。
那么这是如何工作的,我如何让它与 Java 一起工作呢?
谢谢。
shell - 使用参数 (vars) 调用具有 awk shebang 的脚本
我有一个这样定义的 awk 脚本:
我已将其保存为columns
并保存了chmod +x
它。我想调用它,以便在它遍历文件时定义它start
。end
我在想这应该可行:
但事实并非如此。帮助!
linux - “: 找不到命令”
采购一个 env 文件时会出现一些问题(一系列变量导出)
例如:
结果是
=> "/bin" 似乎覆盖了变量的开头而不是后缀..
任何的想法?
顺便说一句,每次我们 source 这个文件时,都会报错:
这很奇怪.. 即使我们评论了它的全部内容,也会出现这条消息。
开始时调用的 shell 看起来不错#!/bin/sh
,或者#!/bin/bash
.
控制字符呢?如何在Linux上筛选它们?
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)。
谢谢。
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,那么显而易见的答案就是不使用它。
python - 从同一个批处理文件中读取批处理文件的第一行?
我有一个批处理文件,它试图运行第一行中指定的程序。类似于 Unix 的shebang:
我想知道的是:有没有办法自动设置%PYTHON%
在C:\Python27\python.exe
shebang()之后的脚本第一行中指定的值#!
?
背景:我正在尝试这样做,以便在包装脚本中明确指定要调用的 Python 解释器(因为系统上安装了多个 Python 解释器)。
假设:您可以假设脚本已经知道它自己的文件名(foo
)并且%~dp0
是该脚本的目录。我们如何阅读不包括 shebang 的第一行?
澄清:将 C:\PythonXY 添加到 %PATH% 不是解决方案。shebang 行应该在用户机器上的安装期间进行修改(原始脚本仅在构建机器上生成).. 可能有多个相同版本的 Python 安装。并且只有 shebang 行是可修改的(这就是程序的工作方式)。