5

ホームディレクトリに2つのpython 2.7.3をインストールしました

   one is for Linux:           /home/luban/Linux/Python/2.7.3
   another is for Solaris:   /home/luban/SunOS/Python/2.7.3

次に、別のシステムで作業しているときに別の python を呼び出すために、/home/luban/bin に「python」という名前のラッパーを作成します。

[luban@lubanworks 1] ~ > 猫 /home/luban/bin/python

#!/bin/sh

CMD=`basename $0`

OS=`uname -s`


CMD_PATH="/home/luban/$OS/Python/2.7.3/bin"


if [ -x "${CMD_PATH}/${CMD}" ];then

    export PATH="${CMD_PATH}:${PATH}"

    exec ${CMD_PATH}/${CMD} ${1+"$@"}

else

    echo "${CMD} is not available for ${OS}" 1>&2

exit 1

fi

 

[luban@lunbanworks 2] `ls -l /home/luban/bin/python`

-rwxrwxr-x  1 luban lunban  221 Apr  5 19:11 python*

以下のスクリプトを使用してラッパーをテストします/home/luban/bin/python

[luban@lunbanworks 3] ~ > cat myscript.py

    #!/home/luban/bin/python

    myname="lunban"

    print "myname is %s" % myname

[luban@lunbanworks 4] chmod +x myscript.py

使いたい./ run myscript.py

[luban@lunbanworks 5] ~ >./myscript.py

    myname=luban: Command not found.
    lpr: Unable to access "myname" - No such file or directory

使用する/home/luban/bin/python myscript.pyことができます:

[luban@lunbanworks 5] ~ > `/home/luban/bin/python myscript.py`

    myname is luban

シバン行を に変更した後#!/home/luban/Linux/Python/2.7.3/bin/python、使用./してスクリプトを実行できます。

[luban@lunbanworks 6] ~ >cat myscript.py

    #!/home/luban/Linux/Python/2.7.3/bin/python
    myname="lunban"

    print "myname is %s" % myname

[luban@lunbanworks 7] ~ >./myscript.py

    myname is luban

#!/home/luban/Linux/Python/2.7.3/bin/pythonmyscript.py の先頭で使用すると、なぜ./myscript.py動作するのか、

#!/home/luban/bin/pythonしかし、Python スクリプトでラッパーを使用./ してスクリプトを実行すると、機能しませんか?

Linux 用に#!/home/luban/bin/pythonpython のみをインストールしたときに使用した多くのスクリプトがありました。それらは で実行できます。変更したくありません。#!/home/luban/./

それで、どのように./pythonスクリプトを実行させますか?ラッパーをシバンラインとして保持したい場合は#!/home/luban/bin/python


詳細:

./myscript.py#!/home/luban/bin/python下のラッパーでは動作しませんCentOS 5.4, Bash 3.2.25

今日、私は下でテストをしていますCentOS 6.4, Bash 4.1.2

追加した

echo '$0 =' $0
echo '${COMMAND_PATH}/${COMMAND} ${1+"$@"} =' ${COMMAND_PATH}/${COMMAND} ${1+"$@"}

#!/home/luban/bin/python追跡するラッパーに。

./myscript.pyラッパーで動作します#!/home/luban/bin/python

[luban@lunbanworks 20] ./myscript.py 
      $0 =  /home/luban/bin/python
      ${COMMAND_PATH}/${COMMAND} ${1+"$@"} =  /home/luban/Linux/Python/2.7.3/bin/python ./myscript.py
      myname is luban

./それで、ラッパーを使用するときのBash 3.2.25のバグである可能性があると思います#!/home/luban/bin/pythonか?

4

1 に答える 1