Можно ли запустить команду bash в irc? - PullRequest
0 голосов
/ 27 сентября 2019

В ssh я могу выполнить мой bash-скрипт, используя

./myscript.sh -g House -y 2019 -u https://someurl.com Artist - Album

Сценарий читает из каталога, который содержит подпапки разных исполнителей, но когда я запускаю триггер из IRC, он говорит, что есть неверное имя папки

Триггер irc !myscript -g House -y 2019 -u https://someurl.com Artist - Album.

В существующем виде я использую этот код для запуска команды IRC

proc dupe:myscript {nick host hand chan arg} {
    set _bin "/home/eggdrop/logfw/myscript.sh"

    if {[catch {exec $_bin "$arg" &} error]} {
        putnow "PRIVMSG $chan :Error.. $error"
    } else {
        putnow "PRIVMSG $chan :Running.. $arg"
    }
}

Я получаю сообщение об ошибке:не могу найти имя папки, сообщающее об этом как -g House -y 2019 -u https://someurl.com Artist - Album

, поэтому мне нужен irc или bash для удаления частей optarg, чтобы показать только папкуимя в irc, пожалуйста.

Я думаю, что ошибка возникает из-за того, что tcl отправляет строку в кавычках, но не уверен, как решить проблему

1 Ответ

0 голосов
/ 27 сентября 2019

Проблема в том, что вы отправляете $arg в виде одной строки, а не нескольких аргументов.Исправление, вероятно, заключается в следующем:

if {[catch {exec $_bin {*}$arg &} error]} {

(остальная часть вашего кода будет такой же.)


Возможно, вам нужно предпринять несколько дополнительных шагов для защиты отпридурки делают перенаправления и другие махинации.Это достаточно просто:

proc dupe:myscript {nick host hand chan arg} {
    set _bin "/home/eggdrop/logfw/myscript.sh"

    # You might need this too; it ensures that we have a proper Tcl list going forward:
    set arglist [split $arg]

    # Check (aggressively!) for anything that might make exec do something weird
    if {[lsearch -glob $arglist {*[<|>]*}] >= 0} {
        # Found a potential naughty character! Tell the user to get lost…
        putnow "PRIVMSG $chan :Error.. bad character in '$arg'"
        return
    }

    if {[catch {exec $_bin {*}$arglist &} error]} {
        putnow "PRIVMSG $chan :Error.. $error"
    } else {
        putnow "PRIVMSG $chan :Running.. $arg"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...