4

Я использую iTerm на своем Mac, и у меня есть файл .bash_profile, который я использую с комфортом. Недавно я узнал о Fish Bash, и я установил его на свой Mac, и вдруг мой .bash_profile не был получен. Любые идеи относительно того, почему я не мог видеть это?

Как я мог проинструктировать мой iTerm и рыбу для получения моего .bach_profile, как это было раньше без рыбы?

2 ответа2

4

У Fish есть только один контролируемый пользователем файл конфигурации, который по умолчанию называется $ HOME/.config/fish/config.fish. Fish также имеет команду экспорта для совместимости с bash/zsh/sh, но это просто тонкая оболочка для формы fish:

set -gx VAR value

Что касается псевдонимов bash, у вас есть два варианта: превратить их в сокращения (см. Команду "abbr") или функции. В fish вы можете определить функцию с помощью команды "alias", но это просто

alias myalias some_command --arg1 --arg2

в

function myalias; some_command --arg1 --arg2 $argv; end

Как указал Гленн Джекман, «рыба - это не удар» Это не улучшенный удар. Переход на рыбу не сложно, но требует немного усилий. Я сделал переход 13 месяцев назад и думаю, что это стоит усилий.

1

Вы можете использовать этот скрипт по истине: [gist link]

Он в основном анализирует .bash_profile и устанавливает те же переменные окружения в Fish.
Прекрасно работает для меня!

# Fish shell

egrep "^export " ~/.bash_profile | while read e
    set var (echo $e | sed -E "s/^export ([A-Za-z_]+)=(.*)\$/\1/")
    set value (echo $e | sed -E "s/^export ([A-Za-z_]+)=(.*)\$/\2/")

    # remove surrounding quotes if existing
    set value (echo $value | sed -E "s/^\"(.*)\"\$/\1/")

    if test $var = "PATH"
        # replace ":" by spaces. this is how PATH looks for Fish
        set value (echo $value | sed -E "s/:/ /g")

        # use eval because we need to expand the value
        eval set -xg $var $value

        continue
    end

    # evaluate variables. we can use eval because we most likely just used "$var"
    set value (eval echo $value)

    #echo "set -xg '$var' '$value' (via '$e')"
    set -xg $var $value
end

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .