没有好的解决方案,因为不同的 unice 处理多字 #! 线不同。便携的 #!use 将您限制为在 #! 上最多向解释器提供一个参数!行,并且解释器或参数中没有空格。
如果语言允许,您可以将脚本设置为 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
where mywrapper
is a program (它可以是一个脚本),用它想要的任何参数调用实际的解释器。或者您可以使可执行文件本身成为包装脚本,并将解释文件分开。第二种解决方案的优点是即使解释器不接受引导#!
线也能正常工作。