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

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

したがって、ディレクトリには、/home/pi/remoteinfo/temp/code という名前のCプログラムa.outtempstart.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

何が起こり、どのように解決しますか?

基本オペレーティングシステムとして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スクリプトを実行するためにディレクトリに存在する必要がない場合)。

関連情報