2

我有一个带有两个shebang 的shell 脚本,第一个告诉#!/bin/sh,几行之后另一个是#!/usr/bin/env python。

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

但是当脚本以 sh script.sh 运行时,第二个 shebang 无法识别,脚本失败。如果脚本作为 sh script.sh 显式运行,我是否可以强制更改解释器。

我需要这个的原因是因为我需要通过一个作为 sh script.sh 运行的工具来运行脚本

4

3 回答 3

3

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

  1. 它在第一行
  2. 它从第一列开始

如果您需要运行 python 代码,请将其放在另一个脚本中,然后通过执行调用该脚本

python path/to/the/script.py
于 2011-12-27T07:48:16.740 回答
1

更好的方法是在此处使用 shell document。像这样的东西:

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

这样,您无需将代码分发到两个单独的文件中。

如您所见,您甚至可以从 python 代码访问 shell 变量。

于 2012-11-16T08:35:24.827 回答
0

让您的 script.sh 脚本直接调用 python 解释器:

#!/bin/sh
# include full path if needed
python (your python interpreter arguments)
于 2011-12-27T07:47:01.297 回答