bash — Запустить интерактивную команду оболочки из PHP в режиме CLI

У меня есть сценарий PHP CLI и я хочу выполнить интерактивную команду bash (например, less huge-file.txt) из этого сценария и получить тот же вид (с less например навигационные элементы управления), как будто я запустил его прямо из терминала.

Нормальный system() вызова недостаточно, потому что они не Пауза и просто вернуть все выходные сразу (в случае, например, less).

Смысл в том, что у меня есть сценарий CLI, который организует несколько задач. Некоторые из них используют сложные команды bash, и я просто хочу вызвать сценарии bash из PHP, но получить исходное поведение терминала.

-1

Решение

Да, это возможно. Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash. Получи это здесь: https://github.com/merlinthemagic/MTS

Я сомневаюсь, что вы действительно ищете сценарий, использующий меньше (это будет ужасно, head / tail / sed / awk — ваши друзья в манипулировании текстом), но получить реальное поведение оболочки вполне возможно.

После загрузки вы просто используете следующий код:

$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');
0

Другие решения

proc_open( 'less huge-file.txt', array( STDIN, STDOUT, STDERR), $pipes);

Это вызывает команду и пропускает все элементы управления и т. Д., Так что нет никакого различия от нормального less huge-file.txt,

Все еще немного неуклюже, но намного короче по сравнению с другими примерами, которые я мог найти.

-1

По вопросам рекламы [email protected]