yuu_nkjm blog
2011-02-05(Sat) 編集
[bash][Linux][Java] シェルスクリプトの設置場所に移動してからのコマンド実行
状況
"/home/hoge/deep/path/project/sh/"という位置にJavaプロジェクトの起動スクリプトを置きたい.Javaのクラスパスの関係から,"/home/hoge/deep/path/project/"でjavaコマンドを発行したい.
スクリプト
起動スクリプトとしてboot.shを作成し,"/home/hoge/deep/path/project/sh/"に設置する.
シェルスクリプトの$0という環境変数には,スクリプトの相対パス付ファイル名が入っている.dirnameコマンドを使って,そこからファイル名を取り除いている.
以下では,全てを絶対パスに変換してから渡しているが,Javaに渡す引数は絶対パスではなく,javaコマンドを実行するパスからの相対パスにした方が良いかもしれない.
#!/bin/bash
SCRIPT_CALLED_DIR=`pwd`
echo This script is called from ${SCRIPT_CALLED_DIR}
SCRIPT_LOCATED_DIR=${SCRIPT_CALLED_DIR}/`dirname $0`
echo This script is located at ${SCRIPT_LOCATED_DIR}
cd ${SCRIPT_LOCATED_DIR}
echo Move to script dir ${SCRIPT_LOCATED_DIR}
cd ../
PROJECT_DIR=`pwd`
echo Move to Project dir ${PROJECT_DIR}
`java -cp bin:jar/log4j-1.2.15.jar info.nkjm.yuu.Hoge`
実行結果
どこからboot.shを実行しても,javaコマンドを実行したい"/home/hoge/deep/path/project/"に移動できている.
[hoge@info /home/hoge]$ deep/path/project/sh/boot.sh
This script is called from /home/nkjm
This script is located at /home/hoge/deep/path/project/sh
Move to script dir /home/hoge/deep/path/project/sh
Move to Project dir /home/hoge/deep/path/project
[hoge@info /home/hoge/deep/path]$ project/sh/boot.sh
This script is called from /home/hoge/deep/path
This script is located at /home/hoge/deep/path/project/sh
Move to script dir /home/hoge/deep/path/project/sh
Move to Project dir /home/hoge/deep/path/project
関連ページ
- この記事のwindows版?バッチファイルが存在するディレクトリへ移動する
-
shスクリプト内で安全に相対パスを使うで紹介されているように,
というのを定番にしても良いかも.#!/bin/bash SCRIPT_DIR=`dirname $0` cd $SCRIPT_DIR # これ以下に処理を書く
2012-02-05(Sun) 編集
[openSUSE][Linux][Windows][Troubleshooting] OSが正常起動しない
接続機器に問題がある
USB接続機器(USB HDD)の問題
- USB HDDなどのUSB接続機器がささっていると,OSがブートしなくなることがあるので,抜いてから起動してみる.抜いて起動したとしても,今度は「ディスクの接続状況の不整合」のようなエラーが待っていることも多い.
ハードディスクに問題がある
ディスクの接続状況の不整合
- yast->System->パーティション設定や/etc/fstabを確認する.
- /etc/fstabに書かれた/dev/sdaなどのディスクが存在しないと通常のブートが出来なくり,レスキューモードで起動される.「ブートに必須のデータが入っていないHDDだし,なくてもbootするやろ」と軽い気持ちでいると,やられることがある.
- レスキューモードでbootすると,rootのパスワードを聞かれる.ログインすると「通常起動するなら"systemctl default"と入れろ」など促される.yastを使うか/etc/fstabを編集するなどして,設定と接続状況が整合するようにする.
ファイルシステムの不整合
レスキューモードの様な形でOSが起動し,以下の様に表示されることがある.
ata_id HDIO_GET_IDENTITY failed for /dev/sdc: Invalid argument fsck.ext2 Bad magic number in super-block while trying to open sdc2
祈りながらfsckをするぐらいしかないのか….
fsck -y /dev/sdc2