在CLI模式下从PHP运行交互式shell命令
问题描述:
我有一个PHP CLI脚本并希望从该脚本执行交互式bash命令(例如less huge-file.txt
),并获得相同的视图(例如导航控件less
),就像我一样直接从终端开始。在CLI模式下从PHP运行交互式shell命令
正常system()
调用,因为他们不暂停,只是返回所有的输出一次(在例如less
的情况下)是不够的。
感觉是我有一个CLI脚本来组织几个任务。其中一些使用复杂的bash命令,我只是想从PHP调用bash脚本,但获得原始终端行为。
答
是的,这是可能的。我最近发布了一个项目,该项目允许PHP获得并与真正的Bash shell进行交互。在这里得到它:https://github.com/merlinthemagic/MTS
我怀疑你真的很少使用脚本(这将变得丑陋,头/尾/ sed/awk是你的朋友在文本操作),但获得真正的shell行为是非常可能的。
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', false);
//open file in less. $return1 will contain the view and the first part of the file you opened. The second argument is needed to delimit the return since less will not end in a shell prompt.
$return1 = $shell->exeCmd('less /path/to/huge-file.txt', 'huge-file.txt');
//quit less, you must do this or the shell will hang on the less prompt and will have to be forcefully terminated.
$return2 = $shell->exeCmd('q');
说的真好:
下载您只需使用下面的代码之后。祝你好运(即使这是不可能的,除非你在cli模式下运行PHP)...你有编程问题吗?这个网站是为了问题,而不是转储您的待办事项/需求清单的地方。 –
@MarcB我认为更一般的问题更好?我正在努力寻找一个好的和短期的解决方案,所以我认为我会很高兴分享我的发现,并要求更好的? – flori
@thatotherguy我有一个CLI脚本,不需要任何Web访问。我重新提出了这个问题,以使其更加清晰。 – flori