5

我正在尝试编写一个简短的函数,以允许我从命令行打开和关闭 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 中的另一个字符串?

4

2 回答 2

4

所以我最终用以下方法解决了这个问题:

# 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
于 2014-01-31T20:30:31.003 回答
3

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是一个不错的选择。

于 2014-01-31T21:30:47.380 回答