Linux:在脚本中运行二进制文件

时间:2010-10-17 15:33:50

标签: linux shell cd sh

我想通过脚本运行程序。 通常我在shell中输入./program并启动程序。

我的脚本如下所示:

#!/bin/sh
cd  /home/user/path_to_the_program/
sh program

它失败了,我认为最后一行出了问题......

我知道这是幼稚的问题,但很多!

5 个答案:

答案 0 :(得分:11)

如果./program在shell中有效,为什么不在脚本中使用它?

#!/bin/sh
cd /home/user/path_to_the_program/
./program

sh program启动sh以尝试将program解释为shell脚本。很可能它不是一个脚本而是一些其他可执行文件,这就是它失败的原因。

答案 1 :(得分:3)

键入

./program

shell尝试根据它确定需要执行的文件的方式来执行程序。如果它是二进制文件,它将尝试执行entry子例程。如果shell检测到它是一个脚本,例如通过使用

#!/bin/sh

#!/bin/awk

或更一般地

#!/path/to/interpreter

shell会将文件(以及任何提供的参数)作为参数传递给提供的解释器,然后执行该脚本。如果路径中给出的解释器不存在,则shell将出错,如果未找到解释器行,则shell将假定所提供的脚本将由其自身执行。

命令

sh program

相当于

./program

当第一行程序包含

#!/bin/sh

假设/ bin / sh是路径中的sh(例如,它可能是/ system / bin / sh)。将二进制文件传递给sh将导致sh将其视为shell脚本,而不是它,二进制文件不是可解释的shell(纯文本)。这就是你不能使用

的原因
sh program

在这种情况下。由于程序是ruby,awk,sed或其他任何不是shell脚本的程序,它也会失败。

答案 2 :(得分:2)

您不需要sh,看起来您的$PATH中没有该计划的路径。

试试这个:

#!/bin/sh
cd  /home/user/path_to_the_program/
./program

答案 3 :(得分:1)

这应该足够了:

/home/user/path_to_the_program/program

如果不起作用,请检查以下内容:

  • 可执行位
  • 程序的shebang行(如果是脚本)

答案 4 :(得分:0)

这里你不需要“sh”。只需将“程序”放在最后一行。