我正在看wpshell – shell,用PHP编写(用于PHP和WordPress)。
它似乎是由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环境? 如果可能的话。
让我们一块一块看看
shell=$(dirname $(readlink -f $0))"/wpshell.php"
$(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
if [ -t 0 ]; then
检查STDIN是否打开并引用一个终端,如果是,则进入if区块
while [ true ]; do
永远循环直到我们休息。 这是如果wpshell崩溃或退出的错误,它会自动重新启动。
/usr/local/bin/php $shell
只是调用php,并将它传递给我们之前找到的wpshell的路径。 if [ $? -eq 0 ]; then break; fi
if [ $? -eq 0 ]; then break; fi
检查最后一个命令( /usr/local/bin/php $shell
)是否成功完成。 ?$
是最后一个命令的返回码,我们检查是否等于0,这意味着没有错误。 如果没有错误,wpshell干净地退出,所以我们完成了,可以打破我们的无限循环退出。 else
如果STDIN没有引用终端,则执行该块
set -f
禁用glob完成,所以像*
这样的东西不扩大。 read -s input
从用户读取一个字符串并将其存储在input
echo $input | /usr/local/bin/php $shell stdin
echo $input | /usr/local/bin/php $shell stdin
将我们刚刚读取的内容作为wpshell的输入,并告诉它读取 大多数这种功能在Windows上不可用。 你很可能会罚款只是在wpshell.php上调用PHP。 创建wpshell.bat,并将"C:\path\to\php" "C:\path\to\wpshell.php"
放入其中。 然后你可以运行wpshell.bat来运行wpshell。