我想通过脚本运行程序。
通常我在shell中输入./program
并启动程序。
我的脚本如下所示:
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
它失败了,我认为最后一行出了问题......
我知道这是幼稚的问题,但很多!
答案 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
如果不起作用,请检查以下内容:
答案 4 :(得分:0)
这里你不需要“sh”。只需将“程序”放在最后一行。