甘いもん好きおやじのブログ

日常の面白いことを描きます。

【Linux】bashのコマンド履歴機能を

bashにはコマンドの実行履歴を参照できる便利な機能があります。
例えば入力待ちの状態の時、↑を押せば、前回実行したコマンドが出てきます。
↑を複数回押せば、さらにその前のコマンドが出てきます。
※↑↓で履歴を行ったり来たり出来ます。
長いコマンドを何度も手で入力するのは面倒なので、この機能を使って同じコマンドを呼び出して実行することがあります。

historyコマンドで、過去のコマンド履歴をずらりと並べて参照することもできます。

例)
    4  su - test
    5  srvctl stop database -d orcl
     :
   <<略>>
     :
1002  cat .bash_history
1003  history 直近で入力したhistoryも出る。

この左端に出てる番号を「!」付きで実行しても、過去のコマンドを実行できます。
例えば、1002 cat .bash_historyを再度実行したい場合、

$ !1002

とすれば実行できます。

これはbash君が実行コマンドを履歴としてメモリに蓄えてくれているからでしょう。
※蓄える量に上限はあるけど。

ちなみに、、、

ターミナルが別、つまりGNOMETeraTermの窓が別々だと、それぞれの実行履歴は、それぞれから見れないです。
以下、検証してみました。

例)ターミナルA、Bを同時に開いて、それぞれ違うコマンドを実行した場合、それぞれのターミナルから実行履歴が見れるか?

■ターミナルA
$ export ORACLE_SID=orcl
    4  su - test
    5  srvctl stop database -d orcl
     :
   <<略>>
     :
1002 export ORACLE_SID=orcl
1003  history

■ターミナルB
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
    4  su - test
    5  srvctl stop database -d orcl
     :
   <<略>>
     :
1002  cat $ORACLE_HOME/network/admin/tnsnames.ora
1003  history
※ターミナルAで実行した「export ORACLE_SID=orcl」はターミナルBのhistoryで出てこない。

ターミナルBで、ターミナルAで実行したコマンドが見れないことが分かります。
各ターミナルでメモリ空間が別々だからでしょうか。

そうは言っても、他のターミナルで実行したコマンドが見たい場合もあります。
ターミナルAの実行履歴を.bash_historyに反映させることで、ターミナルBからもAの実行履歴を参照することが出来ます。

例)ターミナルAの実行履歴をBにも反映させたい。

■ターミナルA
$ export ORACLE_SID=orcl
    4  su - test
    5  srvctl stop database -d orcl
     :
   <<略>>
     :
1002 export ORACLE_SID=orcl
1003  history
$ history -a ★ターミナルAの実行履歴を.bash_historyに反映

■ターミナルB
$ history -n .bash_historyを再読み込み
    4  su - test
    5  srvctl stop database -d orcl
     :
   <<略>>
     :
1002 cat $ORACLE_HOME/network/admin/tnsnames.ora
1003  history
1004  history -n
1005  export ORACLE_SID=orclターミナルAの実行履歴
1006  historyターミナルAの実行履歴
1007  history -aターミナルAの実行履歴
1008  history

これで、他のターミナルで実行したコマンドも参照出来ました。
いちいち、コピペとかしたり、入力する手間がいりません。


参考文献