TopLinux > 2013年8月
2013年8月23日

Linuxで任意のディレクトリから相対パスを使って特定のパスを指定する方法

August 23,2013 12:03 AM
Tag:[]
Permalink

Linuxで任意のディレクトリから相対パスを使って特定のパスを指定する方法を紹介します。

1.やりたいこと

何を言っているのかよく分からないと思うのでサンプルで説明します。

とあるスクリプト

/opt/foo/bin/bar.sh

を作りました。

このスクリプトを起動する条件として、次の3つがあります。

  • 任意のディレクトリから実行可能(スクリプトはフルパス指定)
  • スクリプトのオプションパラメータでコンフィグファイルを相対パスで指定
  • 相対パスの変更は不可

条件を含めた具体的な内容ですが、まず、

$ cd /home/foo
$ cd /home/bar/test
$ cd /var

といった任意のディレクトリに移動します。

そのあとスクリプトを起動するのですが、起動時のオプションパラメータで、

/opt/foo/bin/bar/bar.conf

を指定する必要があります。

/opt/foo/bin/bar.sh /opt/foo/bin/bar/bar.conf

ただし上記のような絶対パスは指定できず、なぜかカレントディレクトリからの相対パスしか許容されていません。

/opt/foo/bin/bar.sh ../../bin/bar/bar.conf

しかも相対パスの部分は変更できないものとします。

つまり、cdのみ手動で好きなディレクトに移動し、そのあとスクリプトをラップしたシェルスクリプトを実行するようなイメージです。

シェルスクリプトであればpwdでカレントディレクトリを取得してそのパスを利用できますが、それもできない条件なのでオプション部分は固定文字列です。

まとめると、

% cd /home/foo
% /opt/foo/bin/bar.sh コンフィグファイルまでの相対パス指定
% cd /home/bar/test
% /opt/foo/bin/bar.sh コンフィグファイルまでの相対パス指定
% cd /var
% /opt/foo/bin/bar.sh コンフィグファイルまでの相対パス指定

という、それぞれのスクリプト起動で「コンフィグファイルまでの相対パス指定」には一意のパスを指定しなければならないのですが、指定方法が分かりません。

やりたいことを図示すると次のようになります。

相対パス指定

カレントディレクトリからの相対パスなので、目的のディレクトリに移動するためには次のようにディレクトリをたどる必要がありますが、普通に考えればそれぞれのカレントディレクトリから目的のディレクトリまでの相対パスはバラバラです。

2.対処方法

お気づきの方も多いと思いますが、一旦ホームディレクトリに移動し、そこからの相対パスを指定することで実現できます。

図示すると次のようになります。

ホームディレクトリに移動してから相対パスを指定

コマンドでは次のように指定します。

% cd /home/foo
% /opt/foo/bin/bar.sh ~/../../opt/foo/bin/bar/bar.conf
% cd /home/bar/test
% /opt/foo/bin/bar.sh ~/../../opt/foo/bin/bar/bar.conf
% cd /var
% /opt/foo/bin/bar.sh ~/../../opt/foo/bin/bar/bar.conf

となります。

「~」をパスの先頭に指定すれば、ログインしたユーザーのホームディレクトリ「/home/xxx」に移動することができます。

この方法であれば、どのディレクトリに移動していても必ずホームディレクトリに戻れるので、そこから目的のディレクトリまで一意の相対パスで指定が可能です。

3.cronで起動する場合

「cronで起動するとどうなるんだろう?」と思いましたが、基本的にログインしたユーザ別のcronで作る前提であれば、cronの中で「~」を利用すれば問題なく動作するようです。

2項の例をcronに設定すると、次のようになります。

0 0 * * * cd /home/bar/test; /opt/foo/bin/bar.sh ~/../../opt/foo/bin/bar/bar.conf
Comments [0] | Trackbacks [0]
2013年8月12日

cronで文字化けするときの対処

August 12,2013 12:03 AM
Tag:[, ]
Permalink

cronで文字化けするときの対処について紹介します。

1.cronで文字化けする原因

cronでスクリプトを時間指定で実行することがあると思いますが、cronはユーザーのシェルで起動しないため、ユーザーの環境変数は引き継がれません。

つまり、cron起動時には文字コードの環境変数LANGの設定などが行われておらず、デフォルトの文字コード以外の文字を標準出力するスクリプトやプログラムを実行すると、文字化けが発生します。

0 0 * * * /home/foo/foo.sh

2.cronで文字化けしないようにする

cronで実行したときに文字化けしないようにするには、cronの中でexport(sh・bash)またはset(csh・tcsh)を実行します。

例えば、bashの場合「crontab -e」で編集画面を開き、プログラムやスクリプトの実行前にexportコマンドを実行します。

0 0 * * * export LANG=ja_JP.eucJP; /home/foo/foo.sh

これでプログラムやスクリプト実行時にはLANGの設定が有効になります。

LANGに設定する文字コードは次のとおりです。

  • UTF-8:ja_JP.UTF-8
  • Shift_JIS:ja_JP.SJIS
  • EUC-JP:ja_JP.eucJP

3.まとめて設定する

実行するcrontabに一律環境変数を設定するには、次のようにcrontab -eの編集画面の先頭に環境変数の定義を記述します。

LANG=ja_JP.eucJP
0 0 * * * /home/foo/foo1.sh
30 0 * * * /home/foo/foo2.sh
  :

4.参考サイト

参考サイトは以下です。ありがとうございました。

Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3