【发布时间】:2011-04-26 14:47:06
【问题描述】:
我想通过脚本运行一个程序。
通常我在 shell 中输入./program 并启动程序。
我的脚本如下所示:
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
它失败了,我认为最后一行出错了......
我知道这是个幼稚的问题,但非常感谢!
【问题讨论】:
我想通过脚本运行一个程序。
通常我在 shell 中输入./program 并启动程序。
我的脚本如下所示:
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
它失败了,我认为最后一行出错了......
我知道这是个幼稚的问题,但非常感谢!
【问题讨论】:
如果 ./program 在 shell 中工作,为什么不在你的脚本中使用它?
#!/bin/sh
cd /home/user/path_to_the_program/
./program
sh program 启动 sh 以尝试将 program 解释为 shell 脚本。很可能它不是脚本,而是其他一些可执行文件,这就是它失败的原因。
【讨论】:
. /home/user/path_to_program/program 运行它,则会出现错误
当你输入时
./program
shell 会根据它确定需要执行的文件的方式来尝试执行程序。如果它是二进制文件,它将尝试执行入口子程序。如果 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 脚本的程序,它也会失败。
【讨论】:
您不需要sh,而且您的$PATH 中似乎没有该程序的路径。
试试这个:
#!/bin/sh
cd /home/user/path_to_the_program/
./program
【讨论】:
这里不需要“sh”。只需将“程序”单独放在最后一行即可。
【讨论】:
sh 是不必要的。
这就够了:
/home/user/path_to_the_program/program
如果这不起作用,请检查以下内容:
【讨论】: