Что вы ожидаете от первого примера? Вы заканчиваете его оператором interact
, который соединяет вашу консоль с stdin / stdout процесса, который вы породили. Программа redis-server
не является интерактивной: она не принимает ввод с консоли. Когда вы запустите redis-server
, оно достигнет ...
1135:M 18 Nov 13:59:51.634 * Ready to accept connections
... и затем он останавливается, ожидая подключения клиентов Redis и работы с ним. Также обратите внимание, что версия Redis, которую я использую, заканчивается на Ready to accept connections
, а не The server is now ready to accept connections
, поэтому я буду использовать это в следующих примерах.
Мы можем добавить команду puts
к ожидаемому сценарию, чтобы увидеть, что это не так
на самом деле застрять в любом месте. Если я запускаю следующее:
#!/usr/bin/expect -f
spawn redis-server
expect "Ready to accept connections"
puts "redis is running"
interact
Я получаю в качестве вывода:
spawn redis-server
1282:C 18 Nov 14:03:33.123 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1282:C 18 Nov 14:03:33.123 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=1282, just started
[...]
1282:M 18 Nov 14:03:33.124 * Ready to accept connections
redis is running
Итак, мы видим, что он не застревает в операторе spawn
,
ни даже в expect
заявлении.
Из вашего вопроса непонятно, почему вы даже используете expect
в этой ситуации redis-server
не является интерактивной программой
и не выдает никаких запросов, требующих автоматизации.