是否可以编写Perl脚本来获取Unix命令的历史记录?这意味着编写一个与Unix命令“历史”具有相同功能的Perl脚本?
我尝试使用tcsh历史记录,但历史记录不包含最新的Unix命令。只有关闭当前的xterm后才能使用最新版本。有没有办法解决它而不关闭xterm?
我在其他帖子中看到了PROMPT_COMMAND ='history -a'的内容,如何使用它? T.T
感谢。
答案 0 :(得分:2)
您可以通过编辑主目录中的.tcshrc
文件来控制此行为。
如果别名为precmd
,则会在显示每个提示之前运行。您想要的命令是history -S
,它将强制保存您当前的历史记录。
假设您一次运行多个终端,您还需要设置savehist
以便它合并所有历史记录而不是仅覆盖。如果没有合并选项,历史文件将被当前终端的历史记录覆盖,但只要您转到另一个窗口,历史记录将被 终端的历史记录覆盖。
因此,假设您要保留500行历史记录(合并),以下是您需要添加到~/.tcshrc
文件中的两行。请注意,除非您更改histfile
,否则您的历史记录将在~/.history
中找到:
set savehist = (500 "merge")
alias precmd "history -S"
最后,我强烈建议(与@Mimisbrunnr达成一致意见)您要考虑使用bash
或zsh
,因为他们已将tcsh
的最佳部分合并到一起凭借Bourne shell(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
答案 1 :(得分:0)
你见过
吗? Term::ReadLine::Gnu
http://search.cpan.org/search?mode=all&query=term+readlin+gnu
在cpan上?
SO有一个
readline
标记它和其他实现。