向外部程序发送多个命令
Send Multiple Commands to External Program
我们正在尝试编写调用外部应用程序的 PowerShell 脚本——Redis 客户端 (redis-cli.exe
)——然后向该 .exe 发送多个命令。我们可以毫无问题地发送如下的单个命令:
& redis-cli -h localhost -p 6379 SMEMBERS someKey
问题是这将启动 Redis 客户端,发出单个命令,关闭客户端,然后 return 将控制权交给 PowerShell。我们需要在一个事务中发出多个命令。例如,这里是我们要发送给客户端的命令:
MULTI
DEL someKey
DEL someSet
EXEC
Redis 客户端确实支持发送 LUA 脚本字符串作为命令,但遗憾的是不支持 MULTI/EXEC 事务命令。换句话说,我们需要能够像我上面列出的那样发出多个命令。
因为 redis-cli
似乎是从 STDIN 读取输入,你可以用这样的命令字符串为它提供一个数组:
'MULTI', 'EXEC' | & redis-cli -h localhost -p 6379
不需要使用 echo
(Write-Output
的别名)将数组送入管道。
您也可以先将命令数组存储在变量中:
$cmds = 'MULTI', 'EXEC'
$cmds | & redis-cli -h localhost -p 6379
我们正在尝试编写调用外部应用程序的 PowerShell 脚本——Redis 客户端 (redis-cli.exe
)——然后向该 .exe 发送多个命令。我们可以毫无问题地发送如下的单个命令:
& redis-cli -h localhost -p 6379 SMEMBERS someKey
问题是这将启动 Redis 客户端,发出单个命令,关闭客户端,然后 return 将控制权交给 PowerShell。我们需要在一个事务中发出多个命令。例如,这里是我们要发送给客户端的命令:
MULTI
DEL someKey
DEL someSet
EXEC
Redis 客户端确实支持发送 LUA 脚本字符串作为命令,但遗憾的是不支持 MULTI/EXEC 事务命令。换句话说,我们需要能够像我上面列出的那样发出多个命令。
因为 redis-cli
似乎是从 STDIN 读取输入,你可以用这样的命令字符串为它提供一个数组:
'MULTI', 'EXEC' | & redis-cli -h localhost -p 6379
不需要使用 echo
(Write-Output
的别名)将数组送入管道。
您也可以先将命令数组存储在变量中:
$cmds = 'MULTI', 'EXEC'
$cmds | & redis-cli -h localhost -p 6379