2011-11-15 29 views
2

我正在查看wpshell - shell,用PHP编写(适用于PHP和WordPress)。如何在Windows上运行用PHP编写的shell?

这似乎是由下面的代码在bash运行:

#!/bin/bash 

shell=$(dirname $(readlink -f $0))"/wpshell.php" 

if [ -t 0 ]; then 
    while [ true ]; do 
     /usr/local/bin/php $shell 
     if [ $? -eq 0 ]; then break; fi 
    done 
else 
    set -f 
    read -s input 
    echo $input | /usr/local/bin/php $shell stdin 
fi 

如何适应这种用于Windows环境?如果可能的话。

回答

2

让我们看看这一块一块

  • shell=$(dirname $(readlink -f $0))"/wpshell.php"

    • $ 0被调用的脚本。 $(cmd)表示取出cmd的输出。
    • readlink -f解析符号链接,所以$(readlink -f $0)在评估任何符号链接后找到正在运行的脚本的完整路径。
    • dirname /path/to/foo.sh返回参数的路径(在本例中为/ path/to)。因此,$(dirname $(readlink -f $0))是解析所有链接之后此脚本运行的目录的完整路径。

    • shell=$(dirname $(readlink -f $0))"/wpshell.php"输出shell=$(dirname $(readlink -f $0))并附加“/wpshell.php”。所以,这整条生产线刚刚得到的完整路径wpshell.php

  • if [ -t 0 ]; then检查,如果STDIN是开放的,是指一个终端,如果确实如此

    • while [ true ]; do循环进入if块永远直到我们休息。这是如此,如果wpshell崩溃或退出的错误,它会自动重新启动。
      • /usr/local/bin/php $shell只是调用php并将它传递给我们之前找到的wpshell的路径。
      • if [ $? -eq 0 ]; then break; fi检查最后一条命令(/usr/local/bin/php $shell)是否成功完成。 ?$是最后一条命令的返回码,我们检查它是否等于0,这意味着没有错误。如果没有错误,wpshell干净地退出,所以我们完成了,并且可以跳出我们的无限循环并退出。
  • else如果STDIN不是指一个终端

    • set -f执行该块禁用水珠完成,所以像*不展开。
    • read -s input读取用户并将其存储在input
    • echo $input | /usr/local/bin/php $shell stdin字符串将我们刚才读的输入wpshell,并告诉它从

多数此功能来读取在Windows上不可用。只需在wpshell.php上调用php就可以了。创建wpshell。蝙蝠,并在其中放入"C:\path\to\php" "C:\path\to\wpshell.php"。然后你可以运行wpshell.bat来运行wpshell。

+0

我试着在命令行模式下运行它,但它似乎也引用了Linux命令和bash内部的PHP代码。 :(总体而言,它似乎不能移植到Windows而不重写。 – Rarst

+0

您可能会对此有一些好运,http://www.andlinux.org/,但它仍然需要一些魔法才能使它工作。 – Wyck

相关问题