Perl-скрипты, которые имеют ту же функцию, что и Unix-команда - PullRequest
0 голосов
/ 08 июля 2011

Можно ли написать Perl-скрипт для захвата истории команд Unix? Что означает написать сценарии Perl, которые имеют ту же функцию, что и Unix Command «history»?

Я пытался использовать историю tcsh, но история не содержит последних команд Unix. Последние будут доступны только после закрытия текущего xterm. Есть ли способ решить это, не закрывая xterm?

Я видел что-то в другом посте, а именно PROMPT_COMMAND = 'history -a', как это использовать? T.T

Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Вы можете контролировать это поведение, отредактировав файл .tcshrc, найденный в вашем домашнем каталоге.

Если вы используете псевдоним precmd, он будет запускаться перед отображением каждого запроса.Командой, которую вы хотите, является history -S, которая принудительно сохранит вашу текущую историю.Предполагая, что вы используете несколько терминалов одновременно, вы также захотите установить savehist, чтобы он объединял все истории, а не просто переписывал.Без опции слияния файл истории будет перезаписан историей вашего текущего терминала, но как только вы перейдете в другое окно, история будет перезаписана этой историей терминала.

ИтакПредполагая, что вы хотите сохранить 500 строк истории (объединены), вот две строки, которые нужно добавить в файл ~/.tcshrc.Обратите внимание, что если вы не изменили histfile, ваша история будет найдена в ~/.history:

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

В заключение я настоятельно рекомендую (в соответствии с @Mimisbrunnr) взглянуть на использованиелибо bash, либо zsh, так как они включили лучшие части tcsh вместе с мощью оболочки Борна (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 голосов
/ 12 июля 2011

Вы видели

 Term::ReadLine::Gnu

http://search.cpan.org/search?mode=all&query=term+readlin+gnu

на cpan?

SO имеет

 readline

тег для него и других реализаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...