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

我正在按照这个简单的教程尝试运行一个简单的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 '$'

我无法找到问题所在,也没有找到有人遇到过这种情况。

非常感谢任何帮助。

点赞
用户1688185
用户1688185

你的问题出在你从一个 交互式 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 抱怨了。

要执行这个样例,你必须在终端中保持:

$ redis-cli EVAL "$(cat /path/to/hello.lua)" 0
"Hello, world!"
2014-01-22 22:11:27
用户389828
用户389828

假如有人是来自 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' 命令里。

set cmd="local msg = 'Hello, world!'; return msg"
redis-cli eval "%cmd%" 0
2015-07-25 20:59:57
用户1547153
用户1547153

如果你是从 Windows 系统转过来,并且想要运行一个 Lua 脚本,你应该使用以下格式:

redis-cli --eval script.lua

在你脚本所在的文件夹中运行这个命令,它会载入一个多行文件并执行它。

2016-04-14 17:07:12