松鼠脚本-空格问题-添加“空格”以传递给“回声”命令

时间:2019-01-08 13:05:40

标签: bash echo whitespace space squirrel

我有一个松鼠插件,可以调用“ 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文件。问题似乎出在“>”或“>”本身周围的空白处。

我已经尝试了数十种替代“>”的方法,但是都没有用。如何创建一个“空格”以传递给脚本,该空格可以接受?谢谢。

1 个答案:

答案 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”中记录的信息做任何我想做的事情。