微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想通过脚本运行一个程序。 通常我在shell中键入./program ,程序启动。

我的脚本如下所示:

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

它失败了,我认为最后一行出错了…

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

将目录更改为* nix cd命令中的最后一个匹配项

目标目录名称中带有“ – =”的cd命令错误

CD自动打开网页

如何限制cd参数到bash中的目录?

别名 – cd后面跟ls

这个linux命令是做什么的:“cd !!:1”

在CD上自动运行PDF

从Windows文件提取目录时,cd命令失败

在CMD / .bat中,我可以将dir从C更改为D,但不是其他方式?

Windows cmd中CD / D开关的原因是什么?

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

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

sh program启动sh来尝试将program解释为shell脚本。 最有可能的不是一个脚本,而是一些其他的可执行文件,这就是为什么它失败。

当你输入

./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

在这方面。 它也会失败,因为程序是红宝石,awk,sed,或者其他不是shell脚本的东西。

你不需要sh ,看起来你没有$PATH程序的$PATH 。

尝试这个:

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

这应该够了:

/home/user/path_to_the_program/program

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

可执行位

该程序(如果是脚本)

这里不需要“sh”。 只要把“程序”放在最后一行就可以了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐