したがって、ディレクトリには、/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
。
何が起こり、どのように解決しますか?
基本オペレーティングシステムとして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
スクリプトを実行するためにディレクトリに存在する必要がない場合)。