
したがって、ディレクトリには/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
実行時に特定のディレクトリにいる必要がない場合)。