より高いレベルのフォルダから実行可能ファイルを呼び出す非常に簡単なスクリプトを作成しようとしています。コンソールにコマンドを入力した場合は、次のように入力しました。
../filenamehere {options} {parameters}
同時に、複数のプロセスを実行するために.shファイルで同じことをしようとしたときに、次のように書こうとします。
../filename {options} {parameters} &
../filename {options2} {parameters} &
../filename {options3} {parameters} &
../filename {options4} {parameters} &
次に、ファイルを実行するには、次のように入力します。
chmod a+x script_file.sh
./script_file.sh
それ以来、「コマンドが見つかりません」というエラーが3回発生しました。これは、私の4つのコマンドのうち1つが実行されたが、残りの3つは実行されなかったという意味だと思います。 .shファイルに入力したのと同じコマンドをコンソールに直接入力しても問題は発生しません。このファイルを実行するにはどうすればよいですか?
答え1
シンボリックリンクを使用していますか?
信頼できるスクリプトを作成するには、"dirname $ 0"を使用しないでください。呼び出しコマンドに関連する$ 0コマンドに関連しています。ディレクトリを参照するには、「readlink -f $0」を使用します。
basedir="$(dirname $(readlink -f $0))"
$basedir/../filename {options} {parameters} &
readlink -f
リンク、作業ディレクトリなどに関係なく、スクリプトの絶対パスを提供します。
答え2
実行可能ファイルを呼び出す前にスクリプトを実行してpwd
最初の実行可能ファイルを実行した後、スクリプトがディレクトリを変更していることを確認できます。
pwd
../filename {options} {parameters} &
pwd
../filename {options2} {parameters} &
pwd
../filename {options3} {parameters} &
pwd
../filename {options4} {parameters} &
答え3
呼び出し方法(絶対パス、相対パス、またはシェルの$ PATHを使用)に関係なく、スクリプトの現在の場所を知る必要があるようです。これがわかったら、現在の場所に関連するパスで他の実行可能ファイルを参照できます。
以下を使用して、実行中のスクリプトの現在位置を取得できます。
MYLOC=`dirname $0`
...その後、この変数を使用して相対実行可能ファイルを実行します。
$MYLOC/../filename
これは現在の作業ディレクトリ($ pwdなど)に関係なく機能し、シェルの$ PATHを介してスクリプトを見つけて実行しても、スクリプトが絶対パスまたは相対パスを介して実行される場合、$ 0には接続があります。 ...の値またはシェルの$ PATHを検索してスクリプトが実行される場合、$ 0にはスクリプトファイルの絶対フルパスが含まれます。
答え4
使用時に現在の作業ディレクトリを変更できます../filename
。したがって、次の行で使用することをお勧めしますscript_file.sh
。
current_directory=$(pwd)
../filename {options} {parameters} &
cd $current_directory
../filename {options2} {parameters} &
cd $current_directory
../filename {options3} {parameters} &
cd $current_directory
../filename {options4} {parameters} &
これは間違いなく期待した結果をもたらすでしょう。