Как перенаправить вывод команды "print" белка в файл?

У меня есть плагин Squirrel, как показано ниже:

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", кажется, эффективна во всех случаях, но я не смог перенаправить вывод.

Обратите внимание, что я не могу сначала изменить слова, которые я записываю, путем экранирования / обратной косой черты перед отправкой их в print, echo или printf.

Спасибо.

1 ответ

Мне удалось решить эту проблему, которую я имел. Я обнаружил, что "держать это простым, глупым" и просто иметь дело с плагином с одним аргументом - вот путь.

Я изменил плагин следующим образом:

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" )

Этот плагин отправляет имя игры в новый скрипт bash, который я создал, под названием "printf1.sh". Сценарий bash находится в той же папке, что и команда "printf", которая находится в папке "/ usr / bin /". Сценарий bash должен войти в эту папку, в противном случае возникает ошибка "chdir" (изменить каталог).

Содержимое скрипта bash: #!/ Bin/bash FILE1=$1 sudo /usr/bin/printf "$FILE1" > "/home/pi/.attract/romlists/REMOVEFAVOURITE.temp"

По сути, название игры является "аргументом", и оно отправляется из модуля "белка" в скрипт bash, который затем перенаправляет имя игры (вывод) в файл "REMOVEFAVOURITE.temp".

Преимущество этого подхода состоит в том, что независимо от того, какую форму принимает название игры, например, с одним апострофом или () или [], например, "Путешествие Сэма (c64)" или "Путешествие Сэма [c64]", сценарий захватывает его и передает это на. Специальные символы не имеют значения.

Оттуда я могу делать все, что захочу, с информацией, записанной в "REMOVEFAVOURITE.temp".

Другие вопросы по тегам