さまざまなユニスが複数の単語を扱うため、良い解決策はありません#!行が異なります。ポータブル#!使用すると、#!のインタプリタに対する引数が最大で1つに制限されます。行であり、インタプリタまたは引数に空白はありません。
言語で許可されている場合は、スクリプトをシェルスクリプトにして、インタプリタに好きなコマンドラインをロードすることができます。たとえば、Perlでは、perlマニュアルから次のようになります。
#!/bin/sh -- # -*- perl -*- -p
eval 'exec perl -wS "$0" ${1+"$@"}'
if $running_under_some_shell;
シェルは2行目以降の処理を停止し、Perlは2行目から3行目を何もしない命令と見なします。いくつかのlisp/Schema方言は#!
...!#
コメントを作成し、あなたが書くことを可能にします
#!/bin/sh
exec guile -s "$0" "$@"
!# ;; scheme code starts here
一般に、唯一の解決策は2つのファイルを含みます。実際のインタプリタを必要な引数で呼び出すプログラム(スクリプトの場合もあります)は#!/usr/bin/env mywrapper
どこにあるかを記述できます。mywrapper
または、実行可能ファイル自体をラッパースクリプトにして、解釈されたファイルを分離しておくこともできます。#!
2番目の解決策には、通訳者が先頭行を受け入れなくても機能するという利点があります。