2014-01-22 202 views
6

我下面這個簡單的教程嘗試一個簡單的Lua中錯誤而執行LUA腳本的Redis服務器

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 

A第二我收到此錯誤

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

我找不到什麼是錯在這裏,我一直沒能找到誰遇到這一點。

任何幫助將深表謝意。

回答

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抱怨。

要執行此示例,你必須留在殼:

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

非常感謝。這解決了它。 –

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 
2

如果您是從窗戶進來,並嘗試運行Lua中,你應該使用這種格式:從

redis-cli --eval script.lua 

運行此您的腳本所在的文件夾,它將加載多行文件並執行它。