Я написал сценарий 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
) повторяется
Что я здесь не так делаю?
Проблема в том, что $myVar
интерпретируется перед передачей в bash. Следующее будет работать, избегая $
до того, как он будет передан в оболочку:
/bin/bash -c "read -e myVar; echo \$myVar"
Также вы можете немного сократить его, используя $REPLY
/bin/bash -c "read -e; echo \$REPLY"
Других решений пока нет …