Включение строки в Fish Shell

Я рассмотрел все подобные вопросы о переполнении стека и перепробовал кучу вещей в их документации. Моя настоящая попытка ниже.

То, что я пытаюсь сделать, - это дифференциальное поведение в зависимости от пользователя компьютера. У меня есть рабочий компьютер и домашний компьютер, и я хочу, чтобы рабочий компьютер при вводе "кода" в командной строке переходил в другой каталог, чем тот, который я хочу при вводе дома. Я попробовал это (мое рабочее имя пользователя - afk, home - sfk):

function code
    set result (dirh)
    if [contains "sfk" $result]
        cd ~/rails
    else if [contains "afk" $result]
        cd ~/code
    else
        echo $result
    end
end

В настоящее время это выглядит так: "Неизвестная команда содержит Users/sfk/.config/fish/" (Мой PWD - Users / sfk /.config / fish /, когда я вхожу в это). Я думаю, возможно, содержит только для списков, но документы не особенно ясно об этом? Есть идеи, как мне это сделать?

РЕДАКТИРОВАТЬ

Просто попробовал это, и хотя он больше не вызывает ошибок, он заканчивается в другом случае, чего не должно быть, потому что мой пользователь IS sfk, который включен в строку dirh:

function code
    set result (dirh)
    if test (contains "sfk" $result)
        cd ~/rails
    else if test (contains "afk" $result)
        cd ~/code
    else
        echo $result
    end
end

1 ответ

Решение

Как сказано выше в комментариях, это лучшее решение для этого конкретного варианта использования. Но ответить на вопрос в случае, если кто-то хочет сделать что-то еще.

Вы правы насчет contains, что он делает точное совпадение по элементам списка. Вы могли бы использовать switch функция вместо Который поддерживает сопоставление с подстановочными знаками.

function code
    set -l result (dirh)

    switch $result
        case '*sfk*'
            cd ~/rails
        case '*afk*'
            cd ~/code
        case '*'
            echo $result
    end
end
Другие вопросы по тегам