由于我还是Unix和Perl的新手,我找到了一个简单而直接的方法来获取我使用Perl脚本运行的Unix命令。
我所知道的是“历史记录”可以追溯我运行的命令,但它在Perl中无法使用后退标记history
来运行它。
我试图在vi文本编辑器中将“history> filename”放在一个临时文件中,使用命令“source”,它可以工作,但命令“source”也不能在Perl脚本中使用后退滴答。
任何人都可以指导我解决我的问题吗?指导我纠正解决问题的方法? T.T
感谢。
答案 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)。