我有一个松鼠插件,它调用"echo"。这几乎是正确的,但尽管考虑了stackoverflow上(以及其他unix相关网站上)对如何处理"空白"或元字符问题的各种响应,我还是没能让"echo"发挥作用。
松鼠插件如下:
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文件。问题似乎是">"或">"本身周围的空白。
我尝试了几十种">"的替代方案,但都没有奏效。我如何创建一个可以接受的"空间"来传递给脚本?谢谢
我设法解决了这个问题。我发现"保持简单,愚蠢",让插件只处理一个参数是可行的。
我修改插件如下:
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脚本与"printf"命令位于"/usr/bin/"文件夹中的同一文件夹中。bash脚本必须进入该文件夹,否则会出现"chdir"(更改目录)错误。
bash脚本的内容是:
#!/bin/bash
FILE1=$1
sudo /usr/bin/printf "$FILE1" > "/home/pi/.attract/romlists/REMOVEFAVOURITE.temp"
基本上,游戏名称是"自变量",它从松鼠插件发送到bash脚本,然后bash脚本将游戏名称(输出)重定向到文件"REMOVEFAVOURITE.temp"。
这种方法的好处是,无论游戏名称采用哪种形式,例如带有一个撇号或()或[],如"山姆之旅(c64)"或"山姆之行(c64])",脚本都会捕捉并传递它。特殊角色没有区别。
从那里,我可以用"REMOVEFAVURITE.temp"中记录的信息做任何我喜欢的事情