Чтение ввода из командной строки пользователя с помощью readline, но bash не является оболочкой по умолчанию

Я написал сценарий PHP и пытаюсь прочитать пользовательский ввод из командной строки. Я начал с

$myVar = exec('read myVar; echo $myVar;');

это работало нормально, но при наборе ввода клавиши со стрелками работали не так, как должны. Я узнал, что это можно решить с помощью ключа -e, поэтому он стал:

$myVar = exec('read -e myVar; echo $myVar;');

Теперь это сработало как прелесть в моей среде разработки, но, к сожалению, в нашей производственной среде PHP не использует оболочку bash и не поддерживает ключ -e, и, вероятно, изменить это нелегко.

В соответствии с третий ответ на этот вопрос можно заставить PHP использовать bash, так что это стало:

$myVar = exec('/bin/bash -c "read -e myVar; echo $myVar"');

Теперь, к сожалению, это не работает как переменная myVar не установлен.

Когда я запускаю команды прямо из командной строки $myVar (переменная оболочки) устанавливается с любым моим вводом, и, следовательно, echo’ed

Однако при использовании опции -c, либо в PHP-exec (), либо непосредственно в командной строке, вот так:

/bin/bash -c "read -e myVar; echo $myVar";

$myVar не устанавливается вообще, и пустая строка (или что-то было предыдущим значением $myVar) повторяется

Что я здесь не так делаю?

3

Решение

Проблема в том, что $myVar интерпретируется перед передачей в bash. Следующее будет работать, избегая $ до того, как он будет передан в оболочку:

/bin/bash -c "read -e myVar; echo \$myVar"

Также вы можете немного сократить его, используя $REPLY

/bin/bash -c "read -e; echo \$REPLY"

0

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

Других решений пока нет …

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