###前提・実現したいこと
historyコマンドで表示されるデータのパスを用途によって変更したいため、シェルスクリプトを使ってシェル変数HISTFILEを変更しようと考え、以下に示すコードを作成しました。簡単に説明すると、
・第一引数に文字列normalが設定されたら、HISTFILEに~/.bash_historyをセットする
・第一引数に文字列lpicが設定されたら、HISTFILEに~/.bash_history_for_lpicをセットする
というスクリプトです。
なぜこのようなスクリプトを作ったかというと、LPICの勉強のために実行したコマンドのhistoryを別にしたかったからです。
bash
1#ファイル名: change_history.sh 2#!bin/bash 3 4if [ $# -ne 1 ]; then 5 echo "\033[0;31mThe number of argument must be one! Set the argument to normal or lpic.\033[0;39m\n" 6 exit 1 7fi 8 9# 通常のとき 10if [ $1 = 'normal' ]; then 11 eval "history -a" # write down the cache on HISTFILE 12 HISTFILE=~/.bash_history 13# eval "HISTFILE=~/.bash_history" 14 eval "history -c" # delete cache 15 eval "history -n" # read HISTFILE and set up new cache 16# 通常用とは違うHISTFILEにしたいとき 17elif [ $1 = 'lpic' ]; then 18 eval "history -a" 19 HISTFILE=~/.bash_history_for_lpic 20# eval "HISTFILE=~/.bash_history_for_lpic" 21 eval "history -c" 22 eval "history -n" 23else 24 echo "\033[0;31mThe argument is invalid!\033[0;39m\n" 25fi 26 27exit 0
###発生している問題・エラーメッセージ
しかし実際に実行しても、HISTFILEが変更されません。
$ sh ~/.change_history.sh lpic $ echo $HISTFILE /Users/user/.bash_history
おそらくこのシェルスクリプトを実行すると、子プロセスが生成されそのプロセス内の変数としてHISTFILEが扱われてしまっているためかな〜?と予想しているのですが、解決策が思い当たりません。
どなたかご教授のほどをお願いいたします。。。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/31 11:59
2017/01/31 15:02
2017/01/31 23:51
2017/02/03 18:25