Скрипт Squirrel - проблема с пробелами - добавьте пробел для передачи в команду echo
У меня есть плагин белка, который вызывает "эхо". Это почти правильно, но, несмотря на то, что я рассмотрел различные ответы на стекопотоки к этой проблеме (и на других сайтах, связанных с Unix) относительно того, как бороться с проблемой "пробелов" или метасимволов, я не смог получить "эхо" для Работа.
Белка плагин выглядит следующим образом:
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 ответ
Мне удалось решить эту проблему, которую я имел. Я обнаружил, что "держать это простым, глупым" и просто иметь дело с плагином с одним аргументом - вот путь.
Я изменил плагин следующим образом:
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".