27

(Я говорю о оболочки рыбы, особ. Рыба Рыба.)

Для Bash/ZSH у меня был ~/.profile с некоторыми экспортами, псевдонимами и прочим.

Я не хочу иметь отдельную конфигурацию для переменных среды для Fish, я хочу повторно использовать мой ~/.profile . Как?

В FAQ указано, что я могу, по крайней мере, импортировать их через /usr/local/share/fish/tools/import_bash_settings.py , однако мне не очень нравится запускать их для каждого экземпляра Fish.

9 ответов9

19

Вы можете использовать Bash для разбора /etc /profile и ~ /.profile, а затем запустить fish.

  1. Создайте /usr/local/bin/fishlogin с содержимым

    #!/bin/bash -l
    exec -l fish "$@"
    
  2. Сделайте это исполняемым

    sudo chmod +x /usr/local/bin/fishlogin
    
  3. Добавьте его в /etc /shells

    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
    
  4. Установите его в качестве оболочки по умолчанию

    sudo usermod -s /usr/local/bin/fishlogin $USER
    
15

Мое текущее решение (см. Здесь, возможно, более свежую версию):

egrep "^export " ~/.profile | while read e
    set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)\$/\1/")
    set value (echo $e | sed -E "s/^export ([A-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)

    set -xg $var $value
end
8

Для более чистого решения вы можете использовать внешний плагин env :

fenv source ~/.profile
3

Я попытался найти .profile при запуске рыбы, и это сработало для меня как шарм.

просто делать :

echo 'source ~/.profile;clear;' >  ~/.config/fish/config.fish

Перезапустите терминал или iterm2, проверьте псевдоним из .profile для проверки.

Примечание: не будет работать с более сложными файлами .profile, которые используют синтаксис, недоступный в fish - credit @erb

2

Установите dash и добавьте эту строку в ваш config.fish:

env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source
1

Ты не можешь Синтаксис fish слишком отличается от синтаксиса оболочки Bourne (/bin/sh). Это та же причина, по которой вы не можете использовать .profile с другими оболочками, не производными от Борна, такими как csh и tcsh .

1

Вы можете начать Рыбу с Bash. Если вы сделаете это, Fish унаследует все переменные окружения (export FOO=bar) от Bash. На данный момент Bash уже прочитал ваш .profile (или тому подобное).

bash-3.2$ export TEST="test"
bash-3.2$ fish
cmey@MBP ~> echo $TEST
test
1

Если в вашем дистрибутиве используется PAM, вы можете установить переменные окружения в файле ~/.pam_environment .

1

Вы можете использовать bass, плагин для выполнения команд bash в fish.

  1. Установите бас.

    $ git clone https://github.com/edc/bass.git
    $ cd bass
    $ make install
    
  2. А затем просто поместите это в ваш config.fish:

    bass source ~/.profile
    

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