今回はUNIX系(bash,zshなど)のシェルで入力したコマンドを保存してみましょう。ちょっと長めの内容が続いたので今回は短めに行きます。連載当初は短かったのに、いつの間にか内容がなんとなく長くなってしまいました。
これまでと同様にカレントディレクトリはデスクトップのsampleディレクトリとします(cd ~/Desktop/sample)。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)なお、掲載されている画面内容はmacOSのzshのものですが、Ubuntu(Linux)やRaspberry Pi OSのbashでも基本的に変わりません。なお、シェルによって異なる部分は別途説明を入れてあります。
カーソルキーでヒストリー操作
ほとんどのシェルは入力したコマンドをヒストリーとして記憶してくれています。少し試してみましょう。以下のように空のファイルを作成するコマンドを入力します。
touch 0.txt
続いてlsコマンドを入力します。
ls
さらに続いて作成したファイルを削除します。
rm 0.txt
ここで本当にファイルが削除されたかどうかlsコマンドを使ってみたいとします。lsコマンドは2文字なので入力した方が早いのですが、ここではヒストリー機能の練習ということでご容赦ください。さて、lsコマンドは削除コマンドの前に使っています。そこで、カーソルキーの上を1回押します。すると、1つ前に入力したコマンドが表示されます。
ここで、もうカーソルキーの上を1回押します。すると、rmコマンドの前に入力したlsコマンドが表示されます。
さらにもうカーソルキーの上を1回押します。すると、lsコマンドの前に入力したtouchコマンドが表示されます。
実行したいのはlsコマンドなので少しヒストリーを戻りましょう。カーソルキーの下を1回押します。すると、lsコマンドが表示されます。
ここでリターンキーを押すとlsコマンドが実行されます。すでにファイルは消されているので何も表示されません。
ここまでの説明でわかると思いますが、これまでに入力したコマンドはカーソルキーの上下で表示することができます。この機能は便利なので当たり前のように使ってる人は多いのではないでしょうか。
historyコマンド
これまでに、どのようなコマンドが入力されたかはhistoryコマンドで確認できます。
history
これまでのヒストリーが記録されているため直前のものだけ表示したい場合があります。この場合はhistoryコマンドの後に数字を指定します。zshでは-4や-9のように表示したい直前のヒストリー数を負数で指定します。bashの場合は負数を指定するとエラーになりますのでマイナス記号なしの正数で指定します。以下の実行結果画面はmacOSの場合がzsh、Ubuntu (Linux)の場合はbashとなっています。
history -4
history 4
記録されるヒストリーの数は環境変数HISTSIZEです。bash,zshとも共通で以下のようにすると記録される最大ヒストリー数が表示されます。
echo $HISTSIZE
zshで負数ではなく正数を指定すると指定したヒストリー番号から最後まで表示されます。1000件目から最後までのヒストリーを表示する場合は以下のように指定します。bashでは1000個までのヒストリーが表示されます。
history 1000
ここでzshではhistory 1とすればすべてのヒストリーが表示されます。これを利用すればリダイレクトを使ってヒストリーを保存しておくことができます。bashの場合はhistory $HISTSIZE > hist.txtでよいでしょう。
history 1 > hist.txt
ちなみに、ヒストリーに関してはホームディレクトリ内にあるファイルに残っています。シェルによって異なりますが、bash,zshでは以下の場所にあるファイルになります。履歴を削除したりコピーしたい場合は、これらのファイルを操作するのもありです。
・bash
~/.bash_history
・zsh
~/.zsh_history
ヒストリーに関する機能はそれなりに充実していて検索しても多くの情報が出てきます。もう少し便利な使い方などもありますが、一旦ヒストリー機能はここまでにしておきます。
scriptコマンド
入力したコマンドとともに表示される結果も保存したい場合もあります。この場合、ヒストリー機能では対応できません。そんな時に便利なのがscriptコマンドです。
scriptと入力した次のコマンドから出力された内容が記録されます。記録内容はカレントディレクトリにtypescriptというファイル名で保存されます。
script
とりあえずいくつかのコマンドを入力して記録させてみましょう。ここでは以下のコマンドを入力してみました。
pwd
ls -la
date
touch 0.txt
ls -la
scriptコマンドによる記録を終了するにはexitと入力します。
exit
単純にscriptコマンドだけを入力するとカレントディレクトリにtypescriptという名前のテキストファイルが作成されます。ただ、他の名前で保存しておきたい場合もあります。この場合は以下のようにscriptコマンドの後に保存先のファイル名(ファイルパス)を指定します。
script hist001.txt
保存するファイル名をscriptコマンド実行時の日時にしたい場合は以下のようにします。(年月日時分秒.txtという形式になります)