ホームディレクトリに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/python
myscript.py の先頭で使用すると、なぜ./myscript.py
動作するのか、
#!/home/luban/bin/python
しかし、Python スクリプトでラッパーを使用./
してスクリプトを実行すると、機能しませんか?
Linux 用に#!/home/luban/bin/python
python のみをインストールしたときに使用した多くのスクリプトがありました。それらは で実行できます。変更したくありません。#!/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
か?