コンパイルされた Java または C プログラムを、そのディレクトリ外のシェル ファイルから実行するにはどうすればよいですか?

コンパイルされた Java または C プログラムを、そのディレクトリ外のシェル ファイルから実行するにはどうすればよいですか?

したがって、ディレクトリには/home/pi/remoteinfo/temp/code という C プログラムa.outと というシェル ファイルがありますtempstart.sh

tempstart.sh ファイルの内容は次のとおりです。

#!/bin/bash
./a.out

これで、ログインすると/home/pi/remoteinfo/temp/code入力でき./tempstart.sh、プログラムの実行が開始されます。

tempstart.hしかし、そのディレクトリ外から 実行しようとすると、次のエラーが発生しますline 3: ./a.out: No such file or directory

何が起こっているのでしょうか、どうすれば修正できるのでしょうか?

私はデフォルトのOSを搭載したRaspberry Pi 3を使用しています

答え1

何が起こっているかというと、スクリプトは現在の作業ディレクトリでコマンドを実行します。./a.outスクリプトに書かれているのは、そのディレクトリです。スクリプトを別の場所から実行すると、バイナリはありませんで現在の作業ディレクトリが原因で、シェルがエラーをスローします。

スクリプトを使用して、呼び出されるディレクトリに関係なくバイナリを呼び出す場合は、少なくとも次の 4 つのオプションがあります。

  • a.outを の既存のディレクトリに配置しPATH、 の場所として現在の作業ディレクトリの指定を停止しますa.out(たとえば、a.outに移動し、ではなく$HOME/bin/a.outを実行するようにスクリプトを変更します)。a.out./a.out
  • スクリプトでバイナリへのフルパスを明示的に呼び出すようにします( では./a.outなく/path/to/the/location/of/a.out
  • スクリプトに以下を追加その PATHスクリプトの場所を指定し、バイナリの場所として現在のディレクトリを指定しないでください(例:PATH="$PATH:/path/to/the/binary"; a.out
  • スクリプトを用意するセットスクリプトを実行する前に、作業ディレクトリをスクリプトの場所に変更します (例cd /path/to/the/binary; ./a.out)

答え2

./script.sh同じディレクトリで実行していると想定します。

a.outが にあるとすると/var/run/a.out、その完全なファイルパスを含むように変更できますtempstart.sh

その時点で、スクリプトをどこからでも実行できます (a.out実行時に特定のディレクトリにいる必要がない場合)。

関連情報