如何获取我使用Perl脚本运行的Unix命令?

时间:2011-07-08 03:10:53

标签: perl unix

由于我还是Unix和Perl的新手,我找到了一个简单而直接的方法来获取我使用Perl脚本运行的Unix命令。

我所知道的是“历史记录”可以追溯我运行的命令,但它在Perl中无法使用后退标记history来运行它。

我试图在vi文本编辑器中将“history> filename”放在一个临时文件中,使用命令“source”,它可以工作,但命令“source”也不能在Perl脚本中使用后退滴答。

任何人都可以指导我解决我的问题吗?指导我纠正解决问题的方法? T.T

感谢。

3 个答案:

答案 0 :(得分:4)

你做不到。 shell(好吧,bash和tcsh,无论如何,你的shell可能,但可能不会,但可能会有所不同)只能以交互模式保存命令历史记录。由perl脚本在子shell中运行的命令不会添加到历史文件中。

答案 1 :(得分:0)

这将获取用户在交互模式下运行的命令的历史记录:

$data_file = "~/.bash_history";
open(DAT, $data_file) || die("Could not open file!");
@fileData = <DAT>;
close(DAT);
foreach $command (@fileData) {
    # Do things here.
}

正如Wobble所提到的,这个历史文件不包含从Perl脚本运行的命令 - 你必须让脚本在运行它时将命令附加到文件中,从而创建它自己的历史文件(或,将它附加到~/.bash_history,这将使它与交互式shell共享历史文件。

答案 2 :(得分:0)

如果您有权访问perl脚本(也就是说,您可以更改它),您只需将perl脚本中运行的每个命令写入选定的文本文件:

sub run_program 
{
    my $program = shift;
    open PROGS, ">>my-commands.txt", or die $!;
    print PROGS $program."\n";
    `$program`;
    close(PROGS);
}

然后每次希望在脚本中运行命令时运行`run_program($ command)。