我想通过脚本运行一个程序。 通常我在shell中键入./program ,程序启动。
我的脚本如下所示:
#!/bin/sh cd /home/user/path_to_the_program/ sh program
它失败了,我认为最后一行出错了…
我知道这是幼稚的问题,但很多!
将目录更改为* nix cd命令中的最后一个匹配项
CD自动打开网页
如何限制cd参数到bash中的目录?
别名 – cd后面跟ls
这个linux命令是做什么的:“cd !!:1”
在CD上自动运行PDF
在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] 举报,一经查实,本站将立刻删除。