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

co-*_*ker 9 linux shell cd sh

我想通过脚本运行程序.通常我输入./programshell并启动程序.

我的脚本看起来像这样:

#!/bin/sh
cd  /home/user/path_to_the_program/
sh program
Run Code Online (Sandbox Code Playgroud)

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

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

Nic*_*ick 11

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

#!/bin/sh
cd /home/user/path_to_the_program/
./program
Run Code Online (Sandbox Code Playgroud)

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


use*_*217 5

当您输入时

./program
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/sh
Run Code Online (Sandbox Code Playgroud)

或者

#!/bin/awk
Run Code Online (Sandbox Code Playgroud)

或者更一般地说

#!/path/to/interpreter
Run Code Online (Sandbox Code Playgroud)

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

一个命令

sh program
Run Code Online (Sandbox Code Playgroud)

相当于

./program
Run Code Online (Sandbox Code Playgroud)

当程序的第一行包含

#!/bin/sh
Run Code Online (Sandbox Code Playgroud)

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

sh program
Run Code Online (Sandbox Code Playgroud)

在此背景下。由于程序是 ruby​​、awk、sed 或任何其他不是 shell 脚本的程序,它也会失败。


小智 0

这里不需要“sh”。只需将“程序”单独放在最后一行即可。