reutiliza '~ / .profile' para Fish?

24

(Eu estou falando sobre o Peixe , especialmente Peixe de Peixe .)

Para Bash / ZSH, eu tive ~/.profile com algumas exportações, aliases e outras coisas.

Eu não quero ter uma configuração separada para variáveis de ambiente para Fish, quero reutilizar meu ~/.profile . Como?

No FAQ, afirma-se que eu posso pelo menos importar esses através de /usr/local/share/fish/tools/import_bash_settings.py , no entanto, eu não gosto muito de executá-los para cada instância do Fish.

    
por Albert 10.07.2012 / 04:41

8 respostas

14

Minha solução atual (consulte aqui para uma versão talvez mais recente ):

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

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

    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
    
por 11.07.2012 / 21:31
18

Você pode usar o Bash para analisar / etc / profile e ~ / .profile e, em seguida, iniciar o fish.

  1. Crie /usr/local/bin/fishlogin com conteúdo

    #!/bin/bash -l
    exec -l fish "$@"
    
  2. Torne-o executável

    sudo chmod +x /usr/local/bin/fishlogin
    
  3. Adicione a / etc / shells

    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
    
  4. Defina como seu shell padrão

    sudo usermod -s /usr/local/bin/fishlogin $USER
    
por 29.02.2016 / 16:50
6

Para uma solução muito mais limpa, você pode usar o env do plugin:

fenv source ~/.profile
    
por 02.01.2017 / 16:35
3

Eu tentei pesquisar o profile.profile na inicialização do peixe e funcionou como um charme para mim.

apenas faça:

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

Reinicie o terminal ou iterm2, teste um alias de .profile para testar.

Nota: Não funciona com arquivos .profile mais complexos que usam a sintaxe não disponível em fish-credit @erb

    
por 05.10.2015 / 07:47
2

Instale dash e adicione essa linha ao seu 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
    
por 05.09.2015 / 19:42
1

Você não pode. A sintaxe do fish é muito diferente da sintaxe do shell Bourne ( /bin/sh ). Esse é o mesmo motivo pelo qual você não pode usar .profile com outros shells não derivados de Bourne, como csh e tcsh .

    
por 10.07.2012 / 08:58
1

Se a sua distribuição usa o PAM , você pode definir suas variáveis de ambiente em sua ~/.pam_environment arquivo.

    
por 05.01.2015 / 05:55
1

Você pode começar o Fish a partir do Bash. Se você fizer isso, o Fish herdará todas as variáveis de ambiente ( export FOO=bar ) do Bash. Neste ponto, o Bash já terá lido seu .profile (ou algo parecido).

bash-3.2$ export TEST="test"
bash-3.2$ fish
cmey@MBP ~> echo $TEST
test
    
por 28.08.2015 / 14:40