スクリプトがごちゃごちゃしてきたので
#!/bin/sh VAR=ABC echo $VAR
$ ./try.sh ABC
bin、etc、(log、tmp、...)とディレクトリを分けたら、
$ tree try/ try/
-- bin |
`-- try.sh |
binに移動しないとちゃんと動作しなくなったとか
#!/bin/sh . ../etc/try.env echo $VAR
$ ./try.sh ABC $ cd .. $ ./bin/try.sh ./bin/try.sh: line 2: ../etc/try.env: そのようなファイルやディレクトリはありません
配置を変えたらスクリプトも変えないといけなくなったとか
#!/bin/sh SCRIPT_DIR=/home/mikeda/try . $SCRIPT_DIR/etc/try.env echo $VAR
$ ~/try/bin/try.sh ABC $ mv ~/try /tmp $ /tmp/try/bin/try.sh /tmp/try/bin/try.sh: line 3: /home/mikeda/try/etc/try.env: そのようなファイルやディレクトリはありません
そういうのはちょっとさみしい。
これは$0とdirnameを使えば対応できます。$0には0番目の引数、つまり実行スクリプトのパスが入ってるのでそれを使えばbinディレクトリの位置がわかるからです。
#!/bin/sh cd `dirname $0` . ../etc/try.env echo $VAR
#!/bin/sh SCRIPT_DIR=`dirname $0`/.. . $SCRIPT_DIR/etc/try.env echo $VAR
$ ~/try/bin/try.sh ABC $ mv ~/try /tmp $ /tmp/try/bin/try.sh ABC