12

スクリプト経由でプログラムを実行したい。通常./program、シェルに入力すると、プログラムが起動します。

私のスクリプトは次のようになります。

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

失敗しました。最後の行が間違っていたと思います...

私はこれが幼稚な質問であることを知っていますが、thxはたくさんあります!

4

5 に答える 5

14

シェルで動作する場合./programは、スクリプトで使用してみませんか?

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

sh programsh を起動programして、シェル スクリプトとして解釈しようとします。ほとんどの場合、それはスクリプトではなく、他の実行可能ファイルであるため、失敗します。

于 2010-10-17T15:40:12.220 に答える
3

入力するとき

./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、またはシェル スクリプト以外のものであるために失敗します。

于 2012-10-11T17:51:19.730 に答える
2

は不要で、shにプログラムへのパスがないようです$PATH

これを試して:

#!/bin/sh
cd  /home/user/path_to_the_program/
./program
于 2010-10-17T15:41:29.973 に答える
0

これで十分です:

/home/user/path_to_the_program/program

それでもうまくいかない場合は、次のことを確認してください。

  • 実行可能ビット
  • プログラムのシバン行 (スクリプトの場合)
于 2010-10-17T15:47:08.733 に答える
0

ここで「sh」は必要ありません。最後の行に「program」だけを入れてください。

于 2010-10-17T15:36:11.690 に答える