Как проверить, содержит ли результат команды строку в рыбной оболочке?

Я пытаюсь написать краткую функцию, позволяющую включать и выключать свет wemo из командной строки. По сути, у меня есть команда, которая, если я наберу wemo status, вернет либо Switch: Lights 1, если свет включен, либо 0, если он выключен. Я хотел бы написать функцию рыбы, которая по существу позволяет мне переключать их:

function lights --description 'Toggle lights'
    if contains (wemo status) "Lights 1"
        wemo switch "Lights" off
    else
        wemo switch "Lights" on
    end
end

Хотя это не работает. Я думаю, что скобки, вероятно, делают текстовую замену? Кто-нибудь знает, как я могу проверить, содержит ли строка другую строку в Fish?


person Billy    schedule 31.01.2014    source источник


Ответы (2)


В итоге я исправил это следующим образом:

# Toggle lights
function lights --description "Toggle Wemo Lights"
    set -l wemo (wemo status)
    switch $wemo
        case '*1'
            wemo switch "Lights" off
        case '*0'
            wemo switch "Lights" on
    end
end
person Billy    schedule 31.01.2014
comment
Это моя рекомендация, как ведущего разработчика по рыбе. Вы можете покончить с переменной, если хотите: switch (wemo status) - person ridiculous_fish; 01.02.2014

contains, похоже, проверяет, содержит ли список элемент

set elems foo bar baz
contains bar $elems; and echo yep

При использовании подстановки команд список оказывается ориентированным на строки:

contains "e f"   (printf "%s\n" "a b c" "d e f" "g h i"); and echo y; or echo n
contains "d e f" (printf "%s\n" "a b c" "d e f" "g h i"); and echo y; or echo n
n
y

Шаблон, соответствующий результату с использованием switch, является хорошим выбором.

person glenn jackman    schedule 31.01.2014
comment
Правильный. Дело в том, что contains не обрабатывает сопоставление шаблонов с подстановочными знаками. contains opt\* $list не будет работать должным образом. Кроме того, не забывайте не забывать свой -- при проверке символов с добавленными дефисами, например, contains -- -opt $list. - person Jorge Bucaran; 08.01.2015