7

シバン行にインタープリターオプションを含めるための受け入れられた移植可能な方法は何ですか? どうすれば次のようなことができますか

#!/usr/bin/env  python -c 

または(より重要なことに)次のようなもの

#!/usr/bin/env java -cp "./jars/*:./src" -Xmn1G -Xms1G -server

正しく解析されるようにするには?現在、ubuntu は全体をまとめているように見えますが、他のシステムはこれを問題なく解析します。

http://en.wikipedia.org/wiki/Shebang_%28Unix%29

問題を説明していますが、解決策はありません。

4

1 に答える 1

5

さまざまなユニスが複数の単語を扱うため、良い解決策はありません#!行が異なります。ポータブル#!使用すると、#!のインタプリタに対する引数が最大で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番目の解決策には、通訳者が先頭行を受け入れなくても機能するという利点があります。

于 2010-07-15T21:28:56.610 に答える