スクリプトの配置場所を意識しないですむので、シェルスクリプトの中から他のスクリプトを実行する時には、絶対パスで指定すると良いかと思います(一旦スクリプト自体の絶対パスを取得してから、実行したいスクリプトの指定)。

スポンサーリンク

シェルスクリプトが置かれている絶対パスを取得サンプルコード

下記がサンプルコードになります。

#!/bin/sh

#シェルスクリプトが置かれている絶対パスを取得
curDir=$(cd $(dirname $0);pwd) 
echo "このスクリプトが置かれている絶対パスを出力"
echo $curDir
echo "絶対パスで指定してスクリプトを実行"
$curDir/tmp/sample.sh

絶対パスの取得は、curDir=$(cd $(dirname $0);pwd) の1行でできますが、少々ややこしいので下記に分解してみました。

1. $0はスクリプトのファイル名が格納されている変数です。

2. dirname $0 とすることで、スクリプトが置かれているディレクトリパスを出力できます。
(この時点では、まだ相対パス)

3. cd $(dirname $0) は、スクリプトの配置場所に移動(サンプルコードの例では実際の移動はされないです)を意味しています。

4. cd $(dirname $0);pwd では、pwdを実行することで絶対パスを出力します。

5. curDir=$(cd $(dirname $0);pwd)では、cd $(dirname $0);pwdを$()で囲むことで、絶対パスの出力結果をcurDirに入力します。

スポンサーリンク