Shell脚本之间的变化
问题描述:
我有一个shell脚本与两个shebangs,第一个告诉#!/ bin/sh,几行之后另一个是#!/ usr/bin/env python。Shell脚本之间的变化
当此脚本被授予可执行权限并以./script.sh运行时,该脚本正常工作,在第一部分中使用/ bin/sh并在后半部分使用python解释器。
但是当脚本以sh script.sh的形式运行时,第二个shebang无法识别并且脚本失败。无论如何,如果脚本明确运行为sh script.sh,我可以强制更改解释器。
我之所以需要这个是因为我需要通过它运行的一些sh script.sh工具来运行这些脚本
答
有你script.sh脚本直接调用Python解释:
#!/bin/sh
# include full path if needed
python (your python interpreter arguments)
答
据我所知,在一个脚本中不能有两行shebang
行。该shebang
只能当 -
- 它是在第一线
- 它开始在列一个
如果你需要运行python代码,然后把它在另一个脚本中,然后调用脚本通过做
python path/to/the/script.py
答
更好的方法来做到这一点将是使用外壳here document。像这样的:
#!/bin/sh
curdir=`pwd`
/usr/bin/env python <<EOF
import os
print os.listdir("$curdir")
EOF
这样,你将不需要将代码分布在两个单独的文件上。如你所见,你甚至可以从python代码访问shell变量。
显示您的脚本以获得真正的帮助。 – 2011-12-27 07:26:24
@Basile Starynkevitch我实际上需要运行python,但该工具只通过sh script.sh运行shell脚本,所以我需要将解释器更改为python – Rnet 2011-12-27 07:36:43
如果将它作为'sh script.sh'运行,那么shebangs都是忽略。无论如何,第二个被忽略 - 内核只看第一个。 – 2011-12-27 07:53:41