Perl Shell执行

Perl Shell执行,perl,Perl,我相信你们都用过 在Metasploit中,当用户按下enter键或键入任何命令时,Metasploit将执行该命令,并返回msf:> 我想知道如何在Perl中做到这一点(基本上是制作一个PerlShell,它执行命令并返回一个小标识符) while(1){ if(等式定义){ 打印“>>” } $command=; 如果($command=~m/help/){ 打印“帮助正在进行中”; }elsif($command=~m/exit/){ 出口(1); } } 看看术语::*模块 看看术语:

我相信你们都用过

在Metasploit中,当用户按下enter键或键入任何命令时,Metasploit将执行该命令,并返回
msf:>

我想知道如何在Perl中做到这一点(基本上是制作一个PerlShell,它执行命令并返回一个小标识符)

while(1){
if(等式定义){
打印“>>”
}
$command=;
如果($command=~m/help/){
打印“帮助正在进行中”;
}elsif($command=~m/exit/){
出口(1);
}
}

看看术语::*模块


看看术语::*模块


确实有一种叫做CPAN的东西,可以从CPAN存档中找到

我还没有试过,但文档都有:

$ cpan
cpan> install Psh

编辑 我玩过一点。我必须改变PS1,这样它就不会干扰Psh。最初,我的PS1设置为:

PS1=$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")
但是,Psh不喜欢它。相反,如果我使用Bash设置,效果会很好:

PS1="\u@\h:\W: PSH> "
启动时,我还会收到以下警告:

Using an array as a reference is deprecated at /Library/Perl/5.12/Psh/StrategyBunch.pm line 260.
Using an array as a reference is deprecated at /Library/Perl/5.12/Psh/Strategy/Darwin_apps.pm line 47.
但它确实启动了。我还没有弄清楚shell历史记录编辑,但它确实需要Perl脚本:

david@DaveBook:david: PSH> foreach $foo (<*>) {
> print "$foo\n";
> }
david@DaveBook:david:PSH>foreach$foo(){
>打印“$foo\n”;
> }

确实有一个叫做的东西,它可以从CPAN存档中获得

我还没有试过,但文档都有:

$ cpan
cpan> install Psh

编辑 我玩过一点。我必须改变PS1,这样它就不会干扰Psh。最初,我的PS1设置为:

PS1=$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")
但是,Psh不喜欢它。相反,如果我使用Bash设置,效果会很好:

PS1="\u@\h:\W: PSH> "
启动时,我还会收到以下警告:

Using an array as a reference is deprecated at /Library/Perl/5.12/Psh/StrategyBunch.pm line 260.
Using an array as a reference is deprecated at /Library/Perl/5.12/Psh/Strategy/Darwin_apps.pm line 47.
但它确实启动了。我还没有弄清楚shell历史记录编辑,但它确实需要Perl脚本:

david@DaveBook:david: PSH> foreach $foo (<*>) {
> print "$foo\n";
> }
david@DaveBook:david:PSH>foreach$foo(){
>打印“$foo\n”;
> }

按照大卫的回答,是我推广的时候了
Zoidberg
是另一个Perl shell(如
PSh
),但它是模块化、可嵌入和可扩展的

  • 您可以使用
    Zoidberg::Shell
    为应用程序构建Shell,或者
  • 您可以使用
    Zoidberg::Fish
    插件系统为您的需要构建一个插件,该插件将在
    Zoidberg
    自身内部运行。它很可能会定义一些命令,可能还会定义语法和操作模式。这方面的cannonical示例是一个SQL插件,它允许Zoidberg识别SQL语句,然后直接从shell内部将它们传递给等待的db句柄并返回结果 碰巧,我是新的维护者。Zoidberg刚刚发布了几年来的第一个版本,它纠正了多年来出现的几个错误。因此,虽然我还不是这方面的专家,但我可能是最接近现有的专家


    从手册页开始阅读关于Zoidberg的内容,然后在上阅读更多关于插件的内容。

    按照David的回答,是我推广的时候了
    Zoidberg
    是另一个Perl shell(如
    PSh
    ),但它是模块化、可嵌入和可扩展的

  • 您可以使用
    Zoidberg::Shell
    为应用程序构建Shell,或者
  • 您可以使用
    Zoidberg::Fish
    插件系统为您的需要构建一个插件,该插件将在
    Zoidberg
    自身内部运行。它很可能会定义一些命令,可能还会定义语法和操作模式。这方面的cannonical示例是一个SQL插件,它允许Zoidberg识别SQL语句,然后直接从shell内部将它们传递给等待的db句柄并返回结果 碰巧,我是新的维护者。Zoidberg刚刚发布了几年来的第一个版本,它纠正了多年来出现的几个错误。因此,虽然我还不是这方面的专家,但我可能是最接近现有的专家



    从手册页开始阅读关于Zoidberg的
    ?Perl已经具备了这个内置程序所需的所有功能,并且有很多模块可以提供帮助。我已经尝试在所有代码中使用while(1)并使其检测换行符(因此它打印>>),但它似乎不正确,还因为命令不会在这个while循环中执行:(我不确定,我理解正确,但如果您想执行命令,只需使用
    system($command);
    或“$command”
    或exec“$command”请参考web了解这三种方法的不同之处…”“我确定您都使用过Metasploit。”你到底为什么会这样想?我肯定你在这一点上错了。你尝试过什么?Perl已经为这个内置程序提供了所需的一切,有很多模块可以提供帮助。我尝试过在所有代码中使用while(1),并让它检测换行符(因此它打印>>)但它似乎不正确,也因为命令不会在这个while循环中执行:(我不确定,我理解正确,但如果你想执行命令,只需使用
    system($command);
    '$command'
    或exec“$command”,请参考网页了解这三种方法的区别。。。“我肯定你们都用过Metasploit。"你到底为什么会这样想?我肯定你在这一点上错了。你可能想试试最近刷过的佐伊贝格。更多信息请参见我的答案…@JoelBerger-看起来很有趣。Psh有点老了。我必须让佐伊贝格试试。你可能想试试最近刷过的佐伊贝格。更多信息请参见我的答案…@JoelBerg呃-看起来很有趣。Psh有点老了。我得试试佐伊德伯格。你能做一些类似于
    $test=“test”的事情吗;echo$test
    在Zoidberg中?我还没有弄明白。对我来说,这是一个非常奇怪的地方,在任何情况下都可以提问。这似乎是一个不稳定的地方,至少在Cygwin上是如此,尽管感谢链接。我在