在shebang系列中包含解释器选项的可接受的可移植方式是什么,即。我该怎么办
#!/usr/bin/env python -c
或(更重要的是)像
这样的东西#!/usr/bin/env java -cp "./jars/*:./src" -Xmn1G -Xms1G -server
并让它被正确解析?现在ubuntu似乎只是把整个事情搞得一团糟,虽然其他系统会解析这个没问题。
http://en.wikipedia.org/wiki/Shebang_%28Unix%29
描述了问题,但没有提供解决方案。
答案 0 :(得分:4)
没有好的解决方案,因为不同的unices对待多字#!线条不同。便携#!使用限制你最多只有一个参数解释#! line,并且在解释器或参数中没有空格。
如果语言允许,您可以将脚本设置为shell脚本,该脚本负责使用它喜欢的任何命令行加载解释器。例如,在perl中,来自perl手册:
#!/bin/sh -- # -*- perl -*- -p
eval 'exec perl -wS "$0" ${1+"$@"}'
if $running_under_some_shell;
shell在第二行之后停止处理,Perl将第2-3行视为不执行任何操作的指令。一些lisp / scheme方言使#!
... !#
成为评论,允许你写
#!/bin/sh
exec guile -s "$0" "$@"
!# ;; scheme code starts here
通常,唯一的解决方案涉及两个文件。您可以编写#!/usr/bin/env mywrapper
,其中mywrapper
是一个程序(它可以是一个脚本),可以使用它想要的任何参数调用实际的解释器。或者,您可以将可执行文件本身设置为包装器脚本,并将解释的文件保持独立。即使解释器不接受前导#!
行,第二种解决方案也具有工作优势。