どちらかというとごはん派

主に仕事用のメモブログ。

【bash】 環境変数の設定

2008年10月10日 10時54分14秒 | linux bash
環境変数とはシェルから起動されたすべてのプロセスに有効な変数のこと

■設定方法
$ FILE=abcd.txt
$ export FILE

また、以下のように1つのコマンドで設定することもできる。
$ export FILE=abcd.txt

ちなみに確認方法はenvコマンド。

こうすると、全てのプロセスにおいて
「$FILE」という変数が「abcd.txt」という値を持つ。

これをシェルが起動したときに行いたい場合
■設定方法
/etc/bash.bashrcに
$ FILE=abcd.txt
$ export FILE
を追記して保存

■確認してみる
$ env
FILE=abcd.txt
↑出てる

■参考資料
http://jo1upk.blogdns.net/linux/?Linux%2F%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AE%E8%A8%AD%E5%AE%9A

【bash】 eval  環境変数を2重展開する

2008年10月09日 14時06分20秒 | linux bash
ファイルから環境変数を文字列で取得してきたが、
文字列として変数に入っているため、展開されない場合
evalコマンドを使用して、2重展開を行う。

・ファイルの中身はこんな感じ
$ cat work.txt
TEST=$DATA_DIR

・ちなみに環境変数は事前に$DATA_DIRを設定。表示するとこんな感じ。
$ env
JAVA_BINDIR=/usr/lib/jvm/java/bin
INPUTRC=/etc/inputrc
DATA_DIR=/root/test

つまり、やりたいことはファイルから「TEST」でgrepし、「$DATA_DIR」という文字列を取得する。
取得した「$DATA_DIR」は、環境変数で設定してあるから、最終的に「/root/test」をとって来たい。

■陥ってしまった失敗
$ IN_DIR=`cat work.txt | grep 'TEST' | cut -d'=' -f2`
$ echo $"$IN_DIR"
$DATA_DIR

ここまでは大丈夫。
いざlsで見に行くと・・・・
$ ls -l $IN_DIR
ls: cannot access $DATA_DIR: No such file or directory

となってしまう。

これ、何がダメかというと「$DATA_DIR」という名のディレクトリがありませんよ。
ということである。確かにないので。
「$DATA_DIR」→「/root/test」に展開されていないわけ。

そこでevalを使って「$DATA_DIR」→「/root/test」に展開させる。

■うまくいった
$ IN_DIR=`cat work.txt | grep 'TEST' | cut -d'=' -f2`
$ echo $"$IN_DIR"
$DATA_DIR

ここまでは一緒。
いざevalを使ってlsすると・・・
$ ls -l `eval echo $"$IN_DIR"`
total 12
-rw-r--r-- 1 root root 570 Oct 8 19:07 aa.txt
-rw-r--r-- 1 root root 558 Oct 8 15:58 test.sh

見れた。

ディレクトリ管理を環境変数で行っていたり
ファイルで管理することはディレクトリ構造の変更時の対応が楽なので
知っておくこと。

【bash】 date 現在日付、時刻を指定して取得

2008年10月09日 12時26分15秒 | linux bash
dateコマンドは、現在の日付と時刻を表示するコマンド
$ date
Thu Oct 9 12:12:38 JST 2008

大きく2つの機能を持つ。
①指定した形式で表示する
$ date +"%Y/%m/%d %p %I:%M:%S"
2008/10/09 PM 12:13:58

$ date +%Y%m%d
20081009

②指定した日付や時刻を表示する
$ date -d '1 days ago'
Wed Oct 8 12:15:59 JST 2008

※ 「-d 'N days ago'」で N 日前の日付を取得できる。
 「-d '1 days'」はN日後。

# 現在日時から10秒前の日時を求める
$date -d '10 seconds ago'
Thu Oct 9 12:19:11 JST 2008

そして、日付を指定して尚且つ形式も指定したい場合(①+②)
$date -d '1 days ago' '+%Y%m%d'
20081008

もちろん「`」でくくって変数に設定することも可能

■参考
http://www.geocities.jp/geo_sunisland/date.html