Включение строки в 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