Articles of shebang

相对shebang:如何编写一个运行它的可移植解释器的可执行脚本

比方说,我们有一个程序/软件包,它有自己的解释器和一组脚本,应该在执行时调用它(使用shebang)。 假设我们想保持它的可移植性,即使只是复制到不同的位置(不同的机器),它仍然可以运行,而不需要调用setup / install或者修改环境(PATH)。 系统解释器不应该混入这些脚本。 给定的约束条件不包括像绝对path这样的已知方法: #!/usr/bin/python 并在环境中search #!/usr/bin/env python 单独的发射器看起来很丑,不能接受。 我发现了很好的总结了shebang局限性,这些局限性描述了为什么shebang中的相对path是无用的,解释者不能有多于一个参数: http : //www.in-ulm.de/~mascheck/various/shebang/ 而且我也用“多线社帮”技巧find了大多数语言的实用解决scheme 。 它允许写这样的脚本: #!/bin/sh "exec" "`dirname $0`/python2.7" "$0" "$@" print copyright 但是有时候,我们不希望用这种方法来扩展/修补依赖于shebang的现有脚本和绝对path的解释器。 例如,Python的setup.py支持–executable选项,它基本上允许为它生成的脚本指定shebang内容: python setup.py build –executable=/opt/local/bin/python 所以,特别是,可以指定–executable=为了使所需的种类的可移植性? 或换句话说,因为我想保持这个问题不是太具体到Python … 这个问题 如何写一个指定解释器的shebang,其path与正在执行的脚本的位置有关?

/ usr / bin / env关于shebang行的问题

问题 : 如果你把一个shell脚本粘贴到shebang行,内核是做什么的? 内核如何知道启动哪个解释器? 说明 : 我最近想写一个/ usr / bin / env的包装器,因为我的CGI环境不允许我设置PATHvariables,除了全局的(当然很糟糕!)。 所以我想,“好吧,让我们设置PREPENDPATH并设置围绕env的包装中的PATH ”。 由此产生的脚本(这里称为env.1 )看起来像这样: #!/bin/bash /usr/bin/env PATH=$PREPENDPATH:$PATH $* 这看起来应该工作。 在设置PREPENDPATH之后,我检查了它们是如何反应的: $ which /usr/bin/env python /usr/bin/env /usr/bin/python $ which /usr/bin/env.1 python /usr/bin/env /home/pi/prepend/bin/python 看起来绝对完美 ! 到现在为止还挺好。 但看看“Hello World!”会发生什么? # Shebang is #!/usr/bin/env python $ test-env.py Hello World! # Shebang is #!/usr/bin/env.1 python $ test-env.1.py […]

在bash和linux内核中,shebang行限制

我试图执行由zc.buildout自动生成的Python脚本,所以我没有控制他们。 我的问题是,shebang行(#!)太长,无论是bash(80个字符的限制)还是直接执行(一些Linux内核常量我都不知道)。 这是一个示例脚本来帮助您重现我的问题: #!/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././bin/bash echo Hola! 如何configurationbash或内核以允许更大的shebang行?

为什么Windows上的virtualenv与virtualenv版本的Python可执行文件关联.py / .pyw / .pyo / .pyc文件?

virtualenv没有将.py(w)文件与virtualenv的Python可执行文件版本关联起来,这是什么原因? 这对于Windows上的virtualenv来说似乎是一个理想的任务,考虑到在Windows上没有像shebang这样的机制。

对于ruby / webrick,我需要窗口来识别shebang(#!)符号

(忍受我,我保证这将得到shebang和窗口。) 我有关于最简单的WEBRick服务器放在一起: require 'webrick' include WEBrick s = HTTPServer.new(:Port=>2000, :DocumentRoot=>Dir::pwd) s.start 不能更简单。 这个基本的服务器确实接受http连接(firefox,internet exploder,wget,TELENT),并且适当地处理它们,只要我只是获取静态文档。 但是,如果我将目录中的一个文件设置为具有.cgi扩展名,那么在服务器的terminal上会得到一个500以及以下内容: ERROR CGIHandler: c:/rubyCGI/test.cgi: C:/…[snip]…webrick/httpservlet/cgi_runner.rb:45: in 'exec': Exec format error – …[snip]… 我在命令行上做了一些事情来模仿cgi_runner.rb的第45行 c:\>ruby exec "c:/rubyCGI/test.cgi" ^Z (same error erupts) c:\>ruby exec "ruby c:/rubyCGI/test.cgi" ^Z Content-type: text/html Mares eat oats and does eat oats and I'll be home for Christmas. 显然,WEBrick还没有被清除,以便登陆窗口。 […]

如何在Windows上执行python脚本?

可能重复: 在Windows上设置Python不要在cmd中键入python 当我在Linux上使用python,甚至在命令行上使用Mac OS时,我会利用shebang并直接运行一些脚本,如下所示: ./myScript.py 。 我确实需要赋予这个脚本可执行的权限,但这就是全部。 现在,我刚刚在Windows 7上安装了Python 3.1.2,并希望能够从命令行执行相同的操作。 我需要遵循什么额外的步骤?

我如何忽略Apache 2上的Windows shebang?

我在Windows机器上build立了一个本地的Perl Web环境。 我正在处理的应用程序最初来自Linux服务器,因此源.pl文件的shebang如下所示: #!/usr/bin/perl 这会导致我的Windows开发机器上出现以下错误: (OS 2)The system cannot find the file specified. 是否有可能更改我的Apache 2 conf,以便我的Windows机器上的shebang被忽略? 当然我可以设置shebang到#!c:\perl\bin\perl.exe ,这很明显; 但问题在于部署更新的文件。 很明显,在每次部署时都会改变这种情况,这很不方便。 我在Windows 7上使用ActivePerl 。 更新: 我应该提到我需要保留这个脚本,以便脚本可以在我们的共享宿主Linux生产服务器上运行。 如果我没有这个限制,而且我也不必使用shebang,那么明显的答案就是不使用它。

在Windows命令提示符中使用shebang / hashbang

我正在使用服务脚本来在Windows 7上提供Node.js的目录。它在MSYS shell或sh运行良好,因为我已经把node.exe和服务脚本放在了我的〜/ bin中在我的PATH上),而input“serve”是因为它是Shebang ( #! )指令,它告诉shell使用节点运行它。 但是,Windows命令提示符似乎不支持没有* .bat或*。exe扩展名的普通文件,也不支持shebang指令。 是否有任何registry项或其他黑客,我可以强制从内置的cmd.exe这种行为? 我知道我可以写一个简单的batch file来运行它,但是我想知道是否可以在一个内置的fasion中完成,所以我不必为每个脚本写一个脚本? 更新:其实,我在想,是否有可能为所有'找不到的文件'编写一个默认的处理程序,我可以自动尝试在sh -c执行? 谢谢。