スクリプトのshebangでインタプリタに複数の引数が渡されるようにするにはどうすればよいですか?

スクリプトのshebangでインタプリタに複数の引数が渡されるようにするにはどうすればよいですか?

~からグレンの答え:

マンページを読んでくださいexecve(2)。個々のオプションのパラメータの制限は、オペレーティングシステムによって異なります。 Linuxはインタプリタの後のすべての単語をパラメータとして扱います。

これを行うには、次のようにします。

#! /path/to/interpreter arg1 arg2 arg3

実際、あなたはこれをしなければなりません。

#!/bin/sh
exec /path/to/interpreter arg1 arg2 arg3 "$@"

スクリプト言語でいくつかのコードを含むスクリプトを作成するには、次の手順を実行します。

#! /path/to/interpreter arg1 arg2 arg3

<script content in the script language>

Glennの答えに基づいて、スクリプトを次のように書く必要があります。

#!/bin/sh
exec /path/to/interpreter arg1 arg2 arg3 "$@"

それではどこに書くべきですか<script content in the script langauge>?シェル言語ではなくスクリプト言語で書かれているので、シェルスクリプトに入れることはできません。どこに入れるべきですか?

ありがとうございます。

ベストアンサー1

muruが提供するオプションに加えて、別のオプションがあります。スクリプトの複雑さと長さに応じて、スクリプトをシェルスクリプトに入れることができます(これが一般的に役に立つかどうかは別の質問です!)「ここに文書化する」メカニズム、次のように他のプログラムにシェルパイプテキストを含めることができます。

テストファイル

#!/bin/sh
exec /usr/bin/python3 <<EOF
import datetime
print("The time is now "+str(datetime.datetime.now()))
EOF

プログラムが非常に大きい場合は使用しません。そのようなスクリプトを編集するのは難しいからです。これらのスクリプトは他の言語に含まれているため、テストするにはスクリプトを抽出して変更する必要があります。

奇妙なことに、シェルはまだこの方法を使用してシェル変数を拡張し、特殊文字を解釈します。

#!/bin/sh
exec /usr/bin/python3 <<EOF
print("The current user is $USER and date is $(date).")
EOF

返品The user is erik and date is Fri Apr 6 22:14:23 MDT 2018

おすすめ記事