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

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

Я пытаюсь добиться дифференциального поведения в зависимости от пользователя компьютера. У меня есть рабочий компьютер и домашний компьютер, и я хочу, чтобы рабочий компьютер переходил в другой каталог, когда я ввожу «код» в командную строку, чем тот, который я хочу, когда я ввожу его дома. Я пробовал это (мое рабочее имя пользователя afk, домашнее 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/, когда я ввожу это). Я думаю, может быть, contains только для списков, но документы не особенно ясны по этому поводу? Есть идеи, как я могу это сделать?

ИЗМЕНИТЬ

Только что попробовал это, и, хотя ошибок больше нет, он оказывается в другом случае, чего не должно быть, потому что мой пользователь 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

person Sasha    schedule 08.06.2013    source источник
comment
Я не понимаю? Если у вас есть 2 разных пользователя, то почему бы вам просто не создать 2 отдельные функции code?   -  person Hauleth    schedule 08.06.2013
comment
Длинный ответ - потому что 90% моих функций рыбы одинаковы, они у меня есть на github, поэтому я могу синхронизировать любую новую функцию рыбы между двумя моими компьютерами, чтобы они вели себя одинаково, но ЭТА функция различается между ними, поэтому вместо того, чтобы пытаться иметь файлы .gitignored со специфическими для компьютера функциями, я надеялся, что функция будет вести себя по-разному в зависимости от имени пользователя компьютера.   -  person Sasha    schedule 08.06.2013
comment
Не думали ли вы установить глобальную переменную env, которая будет указывать путь к нужной вам папке и, т.е. создать в своем домашнем файле .configrc и загрузить его в свой fish.config. Этот подход будет более универсальным.   -  person Hauleth    schedule 08.06.2013
comment
У меня не было, и это сработало. Спасибо!   -  person Sasha    schedule 09.06.2013


Ответы (1)


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

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

function code
    set -l result (dirh)

    switch $result
        case '*sfk*'
            cd ~/rails
        case '*afk*'
            cd ~/code
        case '*'
            echo $result
    end
end
person terje    schedule 10.06.2013