加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Shebang行解析Ubuntu中的问题

发布时间:2020-12-14 19:11:41 所属栏目:Java 来源:网络整理
导读:什么是在shebang线中包含解释器选项的可接受的,可移植的方式,即.我该怎么办呢 #!/usr/bin/env python -c 或者(更重要的是)类似的东西 #!/usr/bin/env java -cp "./jars/*:./src" -Xmn1G -Xms1G -server 并让它正确解析?现在ubuntu似乎只是将整个事情放在一

什么是在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

描述了问题,但没有解决方案.

最佳答案
没有好的解决方案,因为不同的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是一个程序(它可以是一个脚本),可以使用它想要的任何参数调用实际的解释器.或者,您可以将可执行文件本身设置为包装器脚本,并将解释的文件保持独立.第二种解决方案具有工作的优势,即使解释器不接受领先的#!线.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读