スクリプトを介してプログラムを実行したい。通常、シェルに./program
と入力すると、プログラムが起動します。
私のスクリプトは次のようになります。
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
それは失敗します、私は最後の行がうまくいかなかったと思います...
私はこれが幼稚な質問であることを知っていますが、たくさんあります!
./program
がシェルで機能する場合は、スクリプトで使用してみませんか?
#!/bin/sh
cd /home/user/path_to_the_program/
./program
sh program
はshを起動して、program
をシェルスクリプトとして解釈しようとします。ほとんどの場合、これはスクリプトではなく、他の実行可能ファイルであるため、失敗します。
入力すると
./program
シェルは、ファイルを実行する必要があると判断した方法に従って、プログラムを実行しようとします。バイナリの場合、エントリサブルーチンの実行を試みます。シェルがそれがスクリプトであることを検出した場合、たとえば、
#!/bin/sh
または
#!/bin/awk
またはより一般的に
#!/path/to/interpreter
シェルは、ファイル(および指定された引数)を引数として指定されたインタープリターに渡し、インタープリターはスクリプトを実行します。パスで指定されたインタープリターが存在しない場合、シェルはエラーになり、インタープリター行が見つからない場合、シェルは提供されたスクリプトがそれ自体で実行されると想定します。
コマンド
sh program
と同等です
./program
プログラムの最初の行にが含まれている場合
#!/bin/sh
/ bin/shがパス内のshであると想定します(たとえば、/ system/bin/shの場合があります)。バイナリをshに渡すと、shはそれをシェルスクリプトとして扱いますが、そうではなく、バイナリは解釈可能なシェル(プレーンテキスト)ではありません。だから使えない
sh program
この文脈で。また、プログラムがRuby、awk、sed、またはシェルスクリプトではないその他のものであるために失敗します。
sh
は必要なく、$PATH
にプログラムへのパスがないようです。
これを試して:
#!/bin/sh
cd /home/user/path_to_the_program/
./program
これで十分です:
/home/user/path_to_the_program/program
それでも問題が解決しない場合は、以下を確認してください。
ここでは「sh」は必要ありません。最後の行に「プログラム」を単独で置くだけです。