执行 Redis 服务器 Lua 脚本时出现错误。

6
我正在跟随这个简单的教程尝试一个简单的Lua脚本。 http://www.redisgreen.net/blog/2013/03/18/intro-to-lua-for-redis-programmers/ 我创建了一个简单的hello.lua文件,其中包含以下行。
local msg = "Hello, world!"
return msg

我尝试运行简单的命令

EVAL "$(cat /Users/rsingh/Downloads/hello.lua)" 0

我遇到了这个错误

(error) ERR Error compiling script (new function): user_script:1: unexpected symbol near '$' 

我找不到这里有什么问题,也找不到有遇到这个问题的人。

非常感谢任何帮助。

3个回答

8

您的问题来自于您在一个交互式的Redis会话中执行了这个命令:

$ redis-cli
127.0.0.1:6379> EVAL "$(cat /path/to/hello.lua)" 0
(error) ERR Error compiling script (new function): user_script:1: unexpected symbol near '$'

在这样的会话中,您不能使用常见的命令行工具,如cat等(这里的cat是一种方便的方式,用于在原地获取脚本的内容)。换句话说: 您将"$(cat /path/to/hello.lua)"作为普通字符串发送到Redis,这不是Lua代码(当然),Redis会报错。

要执行此示例,您必须留在shell中:

$ redis-cli EVAL "$(cat /path/to/hello.lua)" 0
"Hello, world!"

2
如果您来自Windows并尝试运行Lua脚本,则应使用以下格式:
redis-cli --eval script.lua

在您的脚本所在的文件夹中运行此命令,它将加载一个多行文件并执行它。


0

如果有人是从Windows来到这里的话,我发现我必须要做很多调整才能达到相同的效果。我必须这样做:

echo “local msg = 'Hello, world!'; return msg” > hello.lua
for /F "delims=" %i in ('type hello.lua') do @set cmd=%i
redis-cli eval "%cmd%" 0

如果你想将它保存为文件,你需要将所有内容放在一行上。如果不需要,只需将内容卷入一个设置命令即可。

set cmd=“local msg = 'Hello, world!'; return msg”
redis-cli eval "%cmd%" 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接