2011-12-27 41 views
2

我有一个shell脚本与两个shebangs,第一个告诉#!/ bin/sh,几行之后另一个是#!/ usr/bin/env python。Shell脚本之间的变化

当此脚本被授予可执行权限并以./script.sh运行时,该脚本正常工作,在第一部分中使用/ bin/sh并在后半部分使用python解释器。

但是当脚本以sh script.sh的形式运行时,第二个shebang无法识别并且脚本失败。无论如何,如果脚本明确运行为sh script.sh,我可以强制更改解释器。

我之所以需要这个是因为我需要通过它运行的一些sh script.sh工具来运行这些脚本

+0

显示您的脚本以获得真正的帮助。 – 2011-12-27 07:26:24

+0

@Basile Starynkevitch我实际上需要运行python,但该工具只通过sh script.sh运行shell脚本,所以我需要将解释器更改为python – Rnet 2011-12-27 07:36:43

+2

如果将它作为'sh script.sh'运行,那么shebangs都是忽略。无论如何,第二个被忽略 - 内核只看第一个。 – 2011-12-27 07:53:41

回答

0

有你script.sh脚本直接调用Python解释:

#!/bin/sh 
# include full path if needed 
python (your python interpreter arguments) 
3

据我所知,在一个脚本中不能有两行shebang行。该shebang只能当 -

  1. 它是在第一线
  2. 它开始在列一个

如果你需要运行python代码,然后把它在另一个脚本中,然后调用脚本通过做

python path/to/the/script.py 
1

更好的方法来做到这一点将是使用外壳here document。像这样的:

#!/bin/sh 
curdir=`pwd` 
/usr/bin/env python <<EOF 
import os 
print os.listdir("$curdir") 
EOF 

这样,你将不需要将代码分布在两个单独的文件上。如你所见,你甚至可以从python代码访问shell变量。