gpt4 book ai didi

bash - 为什么我不能用expect脚本来启动redis?

转载 作者:可可西里 更新时间:2023-11-01 11:12:27 25 4
gpt4 key购买 nike

我想肯定有一个简单的原因导致我无法像这样启动redis

----更新-----

@larsks 回答了我的问题后,我意识到正是这个问题引起了我的困惑“你用一个交互语句结束它,它将你的控制台连接到你生成的进程的标准输入/标准输出。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.

它按我预期的那样工作。

顺便说一句,我在这里使用 expect 的原因是首先确保 redis 服务器启动,然后删除一些键。

最佳答案

您希望第一个示例做什么?您以 interact 语句结束它,该语句将您的控制台连接到您生成的进程的标准输入/标准输出。 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 结尾,所以我将在以下示例。

我们可以在 expect 脚本中添加一个 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 不是交互式程序并且不会产生任何需要自动化的提示。

关于bash - 为什么我不能用expect脚本来启动redis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53360288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com