スクリプトが起動したら、hashbangのif / elseなどのソルバーを選択します。

スクリプトが起動したら、hashbangのif / elseなどのソルバーを選択します。

スクリプトを実行するインタプリタを動的に選択する方法はありますか? 2つの異なるシステムで実行されるスクリプトがあり、使用するインタプリタは2つのシステムの異なる場所にあります。結局私がすべきことは、切り替えるたびにハッシュバンラインを変更することでした。私がしたいことはロジックこれと同じです(このような正確な構成が不可能であることを知っています):

if running on system A:
    #!/path/to/python/on/systemA
elif running on system B:
    #!/path/on/systemB

#Rest of script goes here

あるいは、最初のインタプリタを使用しようとし、見つからない場合は、2番目のインタプリタを使用することをお勧めします。

try:
    #!/path/to/python/on/systemA
except: 
    #!path/on/systemB

#Rest of script goes here

どうやら私はどこにいるかに応じてそれを行うことができますが、実際に/path/to/python/on/systemA myscript.py 実行 /path/on/systemB myscript.py されるラッパースクリプトがあるので、myscript.py手動ではなくプログラム的にPythonインタプリタへのパスを指定したいと思います。

ベストアンサー1

実際のプログラムの正しいインタプリタを見つけるために、いつでもラッパースクリプトを作成できます。

#!/bin/bash
if something ; then
    interpreter=this
    script=/some/path/to/program.real
    flags=()
else
    interpreter=that
    script=/other/path/to/program.real
    flags=(-x -y)
fi
exec "$interpreter" "${flags[@]}" "$script" "$@"

ユーザーのPATHasにラッパーを保持しprogram、実際のプログラムを別々に置くか、別の名前を使用してください。

#!/bin/bash配列のためハッシュバンで使用しますflags。可変個数のフラグなどを格納する必要がなく、それなしでもできる場合スクリプトは#!/bin/sh

おすすめ記事