0

我有一个调用“回声”的松鼠插件。这几乎是正确的,但是尽管考虑了关于如何处理“空白”或元字符问题的 stackoverflow 上的各种响应(以及其他与 unix 相关的站点),但我无法获得“回声”工作。

松鼠插件如下:

fe.add_transition_callback( "removefavourite" );
function removefavourite( ttype, var, ttime )
{
switch ( ttype )
{
case Transition.ChangedTag:
            fe.plugin_command( "/bin/echo", "\"" + fe.game_info( Info.Name ) + "\"" + " > " + "\"" + "/home/pi/.attract/romlists/REMOVEFAVOURITE.temp\"");
    return false;
}}

我收到的错误如下:

The parameter word expansion failed. ["Sam's Journey (Easyflash)" > "/home/pi/attract/romlists/REMOVEFAVOURITE.temp"].

该代码有效地将输出传递到终端。但是,它不会将输出重定向到 REMOVEFAVOURITE.temp 文件。问题似乎是围绕“>”或“>”本身的空白。

我已经尝试了几十种“ > ”的替代品,但没有一个奏效。如何创建一个“空间”来传递给它可以接受的脚本?谢谢。

4

1 回答 1

0

我设法解决了我遇到的这个问题。我发现“保持简单、愚蠢”,让插件处理一个参数是可行的方法。

我改变了插件如下:

fe.add_transition_callback( "removefavourite" );
function removefavourite( ttype, var, ttime )
{
switch ( ttype )
{
case Transition.ChangedTag:
fe.plugin_command( "/usr/bin/printf1.sh", "\"" + fe.game_info(Info.Name) + "\"" );
system( "sudo /bin/bash /opt/retropie/configs/all/removefavourite.sh" ); // Starts the process of removing the game from Favourites.txt
}
return false;
}
fe.add_transition_callback( "removefavourite" )

该插件将游戏名称发送到我创建的名为“printf1.sh”的新 bash 脚本中。bash 脚本与“/usr/bin/”文件夹中的“printf”命令位于同一文件夹中。bash 脚本必须进入该文件夹,否则会出现“chdir”(更改目录)错误。

bash 脚本的内容是:

#!/bin/bash 
FILE1=$1 
sudo /usr/bin/printf "$FILE1" > "/home/pi/.attract/romlists/REMOVEFAVOURITE.temp"

基本上,游戏名称是“参数”,它从 squirrel 插件发送到 bash 脚本,然后将游戏名称(输出)重定向到文件“REMOVEFAVOURITE.temp”。

这种方法的好处是,无论游戏名称采用何种形式,例如使用单个撇号或 () 或 [],如“Sam's Journey (c64)”或“Sam's Journey [c64]”,脚本都会捕获它并通过它在。特殊字符没有区别。

从那里,我可以用“REMOVEFAVOURITE.temp”中记录的信息做任何我喜欢的事情。

于 2019-01-11T08:28:31.630 回答