2010-07-19 25 views
1

我在Windows上写了一堆脚本(无法修改)。 Windows允许在其#!命令中使用相对路径。我们正试图在Unix上运行这些脚本,但Bash似乎只是在其#!指令中考虑绝对路径。我环顾四周,但一直未能找到Bash中的选项或设计替换和解释名称的程序。是否有可能重写该功能 - 甚至可能通过使用不同的shell?是否可以重写hashbang/shebang路径行为

+0

Windows在批处理脚本中不使用'#!'。你是指Windows下的Cygwin? – casablanca 2010-07-19 20:54:02

+1

如果脚本无法修改,它不是一个编程问题。 – 2010-07-19 20:54:55

+3

这不是Bash,而是处理shebang行的内核。 – 2010-07-19 22:20:25

回答

4

通常,您可以指定二进制文件来执行脚本,这会导致#!被忽略。所以,如果你有一个Python脚本,看起来像:

#!..\bin\python2.6 
# code would be here. 

在Unix/Linux你可以说:

prompt$ python2.6 <scriptfile> 

,它会执行使用命令行二进制文件。我将hashbang行视为一个要求操作系统使用行中指定的二进制文件的行,但您可以通过不执行脚本作为正常可执行文件来覆盖它。

最糟糕的情况是,您可能会编写一些包装脚本,这些包装脚本会明确告诉解释器在您将使用的所有平台的脚本文件中执行代码。

+0

不幸的是,我正在使用的语言不使用#作为注释,所以这将不起作用 - 当然,如果语言* *支持这一点,这将是答案,所以我会给你的观点。 – wickedchicken 2010-07-20 19:36:08

+2

为了记录,使用#作为注释与是否与#无关!在文件的开始将工作。见http://en.wikipedia.org/wiki/Shebang_(Unix) – ninjagecko 2011-04-26 18:54:50