我想通过脚本运行程序。 通常我在shell中键入./program
并且程序启动。Linux:在脚本中运行二进制文件
我的剧本是这样的:
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
失败的话,我认为最后一行了错误...
我知道这是幼稚的问题,但THX很多!
我想通过脚本运行程序。 通常我在shell中键入./program
并且程序启动。Linux:在脚本中运行二进制文件
我的剧本是这样的:
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
失败的话,我认为最后一行了错误...
我知道这是幼稚的问题,但THX很多!
这里不需要“sh”。只需将“程序”放在最后一行上即可。
它告诉我:“程序:找不到” – 2010-10-17 15:38:08
啊,程序不在你的$ PATH中。 ./程序将工作。 – Toucan 2010-10-17 15:38:44
好吧,有没有一种方法可以通过脚本运行它,而不必将它放到PATH中? – 2010-10-17 15:39:57
如果./program
在shell中工作,为什么不在脚本中使用它?
#!/bin/sh
cd /home/user/path_to_the_program/
./program
sh program
推出SH,试图解释program
作为shell脚本。很可能它不是一个脚本,而是一些其他可执行文件,这就是它失败的原因。
你不需要sh
,看起来你没有在你的$PATH
程序的路径。
试试这个:
#!/bin/sh
cd /home/user/path_to_the_program/
./program
如果解释了'sh'的使用会更好。为什么它不适用于'sh'? – Arafangion 2010-10-18 04:32:12
这应该是足够了:
/home/user/path_to_the_program/program
如果不工作,检查以下内容:
如果程序依赖于当前目录中的相对路径,那么给出路径可能不起作用。例如,程序可能依赖与程序位于同一目录中的输入文件。 – 2010-10-17 15:58:16
在这种情况下,你是对的。 – 2010-10-17 16:11:19
无论如何完成,完整路径必须来自/某处/ - 如果不在路径上,则通过shebang线(如果不在那里),则必须通过某种方式明确设置。 – Arafangion 2010-10-18 04:30:54
当键入
./program
壳试图根据它如何确定该文件需要被执行以执行该程序。如果它是二进制文件,它将尝试执行入口子程序。如果壳检测到它是一个脚本,例如,通过使用
#!/bin/sh
或
#!/bin/awk
或更一般
#!/path/to/interpreter
壳会通过文件(和任何提供的参数)作为参数提供给解释器,然后它将执行脚本。如果路径中给出的解释器不存在,那么shell将会出错,并且如果没有找到解释器行,那么shell将假定提供的脚本将自行执行。
甲命令
sh program
相当于
./program
当程序的第一行包含
#!/bin/sh
假定/ bin/sh的是在路径的SH(例如它可能是/ system/bin/sh)。将一个二进制文件传递给sh将导致sh将其视为一个shell脚本,事实并非如此,二进制文件不是可解释的shell(它是纯文本文件)。这就是为什么你不能在这种情况下使用
sh program
。它也会失败,因为程序是ruby,awk,sed或者其他不是shell脚本的东西。
不应该是#!/ bin/sh? – Protostome 2010-10-17 15:36:16