我想我可能无法启动Redis是一个简单的原因
----更新-----
@larsks回答了我的问题后,我意识到这是引起我困惑的一个问题:“您以一个交互语句结束它,这使您的控制台与所产生的进程的stdin / stdout一致。redis-server程序不是互动式:它不接受任何控制台输入。”
我再次检查代码,发现正是这段代码使我认为流程陷入困境
#!/usr/bin/expect -f
spawn redis-server
expect "The server is now ready to accept connections"
interact
spawn redis-cli
expect ">"
...
我从没见过redis-cli运行。
但是如果我更改为
#!/usr/bin/expect -f
spawn redis-server
expect "The server is now ready to accept connections"
spawn redis-cli
expect ">"
...
interact //put it in the end.
它按我的预期工作。
顺便说一句,我在这里使用期望的原因是首先确保Redis服务器启动,然后删除一些密钥。
答案 0 :(得分:2)
您期望第一个示例做什么?您以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
不是交互式程序
并且不会产生任何需要自动化的提示。