スクリプト経由でプログラムを実行したい。通常./program
、シェルに入力すると、プログラムが起動します。
私のスクリプトは次のようになります。
#!/bin/sh
cd /home/user/path_to_the_program/
sh program
失敗しました。最後の行が間違っていたと思います...
私はこれが幼稚な質問であることを知っていますが、thxはたくさんあります!
シェルで動作する場合./program
は、スクリプトで使用してみませんか?
#!/bin/sh
cd /home/user/path_to_the_program/
./program
sh program
sh を起動program
して、シェル スクリプトとして解釈しようとします。ほとんどの場合、それはスクリプトではなく、他の実行可能ファイルであるため、失敗します。
入力するとき
./program
シェルは、ファイルを実行する必要があると判断した方法に従って、プログラムを実行しようとします。バイナリの場合は、entry サブルーチンの実行を試みます。シェルがそれがスクリプトであることを検出した場合、たとえば、
#!/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」は必要ありません。最後の行に「program」だけを入れてください。