我有一个 PHP 脚本,经过许多复杂的处理,最终生成一个命令供用户运行。现在,它打印命令然后退出。用户必须复制命令并粘贴才能运行它。由于 PHP 命令是在命令行上运行的,因此如果 PHP 脚本能够将命令放在命令行上,用户会更容易操作。用户只需按 Enter 即可。(是的 - 要求由人来运行命令,否则我只会从脚本内部执行命令。)
我尝试使用 xclip 将命令复制到剪贴板。它挂起了。我使用 exec 和 system 来运行它。要运行的命令在 $command 中,我使用了:
exec("echo \"$command\" | xclip");
使用 exec 和 system 时,它会挂起,直到我按下 ctrl-C,而剪贴板中却没有任何内容。
更新我发现,如果我在命令中将 xclip 连接到 /dev/null,它就不会挂起。然后我可以将其添加到用户的剪贴板,然后他/她可以使用 ctrl+shift+v 运行它
exec("echo \"$command\" | xclip -sel clip -i > /dev/null");
我尝试过在命令行上用复杂的脚本包装整个过程,删除最后一行输出,然后尝试将其粘贴到命令行中。我可以让它打印命令,但不是在命令行上。它总是打印命令,然后命令行出现在它下面。
我使用 BASH 作为命令行。因此,任何解决方案都必须在 bash shell 中工作 - 假设有一个解决方案。
答案1
不完全是按下回车键,但也不是很难 - 命令
history -s "command to put in history"
会将给定的命令行添加到 bash 历史记录中。然后您只需使用 [向上箭头][回车] 即可检索并运行注入的命令。
(我不确定您是否可以直接从 PHP 执行此操作,或者是否需要将 PHP 脚本包装到 bash 脚本中,但这应该是可行的)
答案2
你可以使用xdotool
输入你想要的命令:
xdotool type "command you want to enter"
您可以使用xdotool
@davidgo 回答来从历史记录中调用最后一个命令:
history .... && xdotool key Up