我有一个松鼠插件,可以调用“ echo”。这几乎是正确的,但是尽管考虑了关于该问题(以及其他与Unix有关的站点)关于stackoverflow的各种响应,但是如何解决“空白”或元字符问题,我却无法“回声”工作。
松鼠插件如下:
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文件。问题似乎出在“>”或“>”本身周围的空白处。
我已经尝试了数十种替代“>”的方法,但是都没有用。如何创建一个“空格”以传递给脚本,该空格可以接受?谢谢。
答案 0 :(得分: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"
游戏名称基本上是“参数”,它是从松鼠插件发送到bash脚本的,然后bash脚本将游戏名称(输出)重定向到文件“ REMOVEFAVOURITE.temp”。
此方法的好处是,无论游戏名称采用哪种形式,例如使用单撇号或()或[](例如“ Sam's Journey(c64)”或“ Sam's Journey [c64]”),脚本都将捕获并继续传递下去。特殊字符没有区别。
从那里,我可以使用“ REMOVEFAVOURITE.temp”中记录的信息做任何我想做的事情。