我想通过脚本运行程序.通常我输入./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脚本.很可能它不是脚本而是其他一些可执行文件,这就是它失败的原因.
当您输入时
./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 脚本的程序,它也会失败。