2011-07-08 12 views
0

Unixコマンドの履歴を取得するPerlスクリプトを書くことは可能ですか?つまり、Unix Command "history"と同じ機能を持つPerlスクリプトを書くのですか?Unixコマンド "history"と同じ機能を持つPerlスクリプト?

tcshの履歴を使用しようとしましたが、履歴に最新のUnixコマンドが含まれていません。最新のものは、現在のxtermを閉じた後にのみ利用可能になります。 xtermを閉じることなくそれを解決する方法はありますか?

私はPROMPT_COMMAND = 'history -a'という他の投稿で何かを見ましたが、その使い方は? T.T

ありがとうございました。

+0

これは少し話題かもしれませんが、なぜあなたはtcshを使用していますか?おそらく、bashやzshのようなものがあなたのニーズに合っています。また、話題と同じように、あなたの履歴変数などを設定しましたか?私はtcshが良い歴史サポートを持っていたから... – zellio

答えて

2

ホームディレクトリにある.tcshrcファイルを編集して、この動作を制御できます。

precmdのエイリアスは、各プロンプトが表示される前に実行されます。必要なコマンドはhistory -Sで、現在の履歴を強制的に保存します。 複数の端末を同時に実行していると仮定すると、上書きするのではなくすべての履歴をマージするように、savehistを設定することもできます。マージオプションがなければ、ヒストリファイルは現在の端末の履歴で上書きされますが、別のウィンドウに行くとすぐにヒストリは端末の履歴であるで上書きされます()。

したがって、500行の履歴を保存(結合)したい場合は、~/.tcshrcファイルに追加する必要がある2行を次に示します。あなたがhistfileを変更した場合を除き、あなたの歴史は~/.historyに記載されています、注意:クロージングで

set savehist = (500 "merge") 
alias precmd "history -S" 

、私は強く、あなたが彼らのようにbashまたはzshのいずれかを使用して見ていること(@Mimisbrunnrと一致)をお勧めしたいですtcshのベストパーツとBourneシェルのパワー(sh)を組み合わせて、すべての弱点を除いてcshとしました。

ああ...、あなたは歴史を取得するためのperlスクリプトをしたい場合は、のようなものを使用します。

#!/usr/bin/perl 
use strict; 
use warnings; 

open my $hist_fh, '<', "$ENV{HOME}/.history" or die "Cannot open history file: $!\n"; 

my @history; 
while (<$hist_fh>) { 
    chomp; 
    next if /^#/; # Skip timestamps 
    push @history, $_; 
} 
close $hist_fh; 

print "Now I have my history in an array, the latest thing I did was: $history[-1]\n" 
    if @history > 0; # show latest command if we were able to read the history file 
+0

こんにちは!私にこのような提案やアドバイスをくれてありがとう、本当にありがとう!私は質問があります。私がしようとしていることは、Unixではコマンドを入力せずにPerlスクリプトを使ってすべてを実装することです。つまり、〜/ .tcshrcファイルに〜/ .tcshrcファイルを追加することです異なる構文または他の方法を使用することができます。 – keifer

+0

賛辞をありがとう。シェル履歴(この場合は 'tcsh')を取得しようとしている場合は、シェルを介してその履歴の書き込みを有効にする必要があります。つまり、シェルの機能です。その代わりに歴史を持つ独自のコマンドラインプロンプトを書くことを求めていたなら、 'Term :: Readline :: Gnu'を使ってプロンプトを作成し、ユーザ入力を取得し、履歴を保存し、検索するなどができます。後者の場合ここでは、独自のシェルまたはインタラクティブなインタフェースをプログラムに記述しています。 – unpythonic

+0

Term :: Readline :: Gnuを最初に勉強してみましょう。したがって、 "history -S"と同じ機能を持つPerlスクリプト/構文はありませんか? – keifer

関連する問題