Quantcast
Viewing all articles
Browse latest Browse all 2722

いつ,どこで,どのファイルを実行したのか自動で記録する

はじめに

日頃からシェルスクリプトとPythonのファイルを実行していると,
いつ,どこで,どのような処理をしたのか,残しておきたくなります.
ここでは,これらを記録するための,私なりの工夫をご紹介します.

その日のための作業用ディレクトリ

まず,その日のための作業用ディレクトリを作成します.
以下ではこれを「DF (Day Folder)」と呼ぶことにします.
ドキュメントの下にその月のディレクトリを作成し,
その中にさらに,その日のためのディレクトリを作成します.
DFの作成は,bashrcに以下のように記載して,自動化しています.

~/.bashrc
export DF=/home/Username/Documents/`date '+%m'`/`date '+%m%d'`
mkdir -p $DF

私はDFを,その日の汎用的なフォルダとして,様々な書類の保存に使用しています.
たとえばあるコードを書き換える際には,更新前のコードを

$ cp main.c $DF

と,念のため保存しています.

ジョブファイルを保存して実行するコマンドの定義

次に,シェルスクリプトとPythonのジョブファイルを実行した際に,
エラーにならなかった場合にそのファイルをDFにコピーし,
実行した時間と実行した場所を記録して,区別できるようにします.
私はジョブファイルのファイル名の先頭に実行した時間を付加し,
ジョブファイルの一番先頭の行に実行した場所を挿入しています.

bashrcに次の項目を追記して,コマンド「ana」を定義します.

~/.bashrc
function ana(){
 DFFILE=$DF/`date '+%H%M%S'`$1
 if [ "'`echo ${1##*.}`'" = "'sh'" ]; then
    sh $1 && cp $1 $DFFILE && sed -i 1i`pwd`$1 $DFFILE

 elif [ "'`echo ${1##*.}`'" = "'py'" ]; then
    python $1 && cp $1 $DFFILE && sed -i 1i`pwd`$1 $DFFILE

 else
    echo "the extension of job file must be 'sh' or 'py' with command ana"
    echo "the extension of input file:'`echo ${1##*.}`'"
 fi
}

anaコマンドの引数は,拡張子が ".sh" もしくは ".py" のジョブファイルです.
引数の拡張子を判別して,sh もしくは python のコマンドを実行します.

$ ana hoge.sh #or hoge.py

具体例

$ cd $DF          #ここではDFで作業することにします.
$ ls                    #".sh" と ".py" の二つのファイルを用意しました.
main.sh hoge.py         
$ cat main.sh       #main.sh を実行すると,
echo "This is a pen"    #"This is the pen" と表示します.                                                                                       
$ ana main.sh           #「ana」で実行してみます.
This is a pen           #たしかにシェルスクリプトが実行されました.
$ ls $DF                # DFの中には,main.shに時間がついたファイルがあります. 
182115main.sh   main.sh     hoge.py
$ head $DF/182115main.sh #このファイルの一行目には,実行した場所が記載されています.
/home/Username/Documents/12/1230main.sh
echo "This is a pen"
$ cat hoge.py       #以下,Pythonでも同様の操作になります.
print("Is this a pen?")
$ ana hoge.py 
Is this a pen?
$ ls $DF/Executed
182115main.sh  182329hoge.py    main.sh     hoge.py
$ head $DF/182329hoge.py
/home/Username/Documents/12/1230hoge.py
print("Is this a pen?")

Viewing all articles
Browse latest Browse all 2722

Trending Articles