0

我有一个松鼠插件如下:

fe.add_transition_callback( "removefavourite" );
function removefavourite( ttype, var, ttime )
{
switch ( ttype )
{
case Transition.ChangedTag:
print( fe.game_info( Info.Name ) + "\n" );
system( "echo '" + fe.game_info( Info.Name ) + "' > /home/pi/.attract/romlists/ROMNAME.tmp" );
system( "printf '" + fe.game_info( Info.Emulator ) + "' > /home/pi/.attract/romlists/ROMNAME2.tmp" );
break;
}
return false;
}
fe.add_transition_callback( "removefavourite" )

我想将“打印”命令的输出从终端/控制台重定向到文件。但是,我似乎不能这样做,如果有人可以帮助我,我将不胜感激。

我在 bash 中尝试过替代方案——“echo”命令和“printf”命令的许多变体,但这些对于捕获包含括号(例如)或单引号(例如')的单词无效。“打印”命令似乎在所有情况下都有效,但我无法重定向输出。

请注意,在将它们发送到 print、echo 或 printf 之前,我无法通过转义/反斜杠特殊字符来修改我首先捕获的单词。

谢谢你。

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:24:58.493 回答