web-dev-qa-db-fra.com

réutiliser '~ / .profile` pour Fish?

(Je parle de la coquille poisson , en particulier poisson du poisson .)

Pour Bash/ZSH, j'avais ~/.profile avec des exportations, des alias et d'autres éléments.

Je ne veux pas avoir une configuration séparée pour les variables d'environnement pour Fish, je veux réutiliser mon ~/.profile. Comment?

Dans la FAQ, il est indiqué que je peux au moins importer ceux-ci via /usr/local/share/fish/tools/import_bash_settings.py, mais je n'aime pas trop exécuter cela pour chaque instance de Fish.

31
Albert

Ma solution actuelle (voir ici pour une version peut-être plus récente):

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
15
Albert

Vous pouvez utiliser Bash pour analyser/etc/profile et ~/.profile, puis commencer à pêcher.

  1. Créez /usr/local/bin/fishlogin avec le contenu

    #!/bin/bash -l
    exec -l fish "$@"
    
  2. Le rendre exécutable

    Sudo chmod +x /usr/local/bin/fishlogin
    
  3. Ajoutez-le à/etc/shells

    echo /usr/local/bin/fishlogin | Sudo tee -a /etc/shells
    
  4. Définissez-le comme votre shell par défaut

    Sudo usermod -s /usr/local/bin/fishlogin $USER
    
25
Noé Rubinstein

Pour une solution beaucoup plus propre, vous pouvez utiliser le plugin foreign env :

fenv source ~/.profile
10
jgillich

J'ai essayé de m'approvisionner en .profile au démarrage du poisson et cela a fonctionné à merveille pour moi.

il suffit de faire:

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

Redémarrez terminal ou iterm2, testez un alias de .profile.

Remarque: Ne fonctionnera pas avec des fichiers .profile plus complexes utilisant une syntaxe non disponible dans fish - credit @erb

4

Installez dash et ajoutez cette ligne à votre 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
3
yegorius

Vous pouvez utiliser bass , un plugin pour exécuter des commandes bash dans fish.

  1. Installer la basse .

    $ git clone https://github.com/edc/bass.git
    $ cd bass
    $ make install
    
  2. Et puis, mettez ceci dans votre config.fish:

    bass source ~/.profile
    
3
rsalmei

Tu ne peux pas. La syntaxe de fish est trop différente de celle de Bourne Shell (/bin/sh). C'est la même raison pour laquelle vous ne pouvez pas utiliser .profile avec d'autres shells non dérivés de Bourne, tels que csh et tcsh.

1
Spiff

Vous pouvez commencer le poisson de Bash. Si vous faites cela, Fish héritera de toutes les variables d'environnement (export FOO=bar) de Bash. À ce stade, Bash aura déjà lu votre .profile (ou similaire).

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

Si votre distribution utilise PAM , vous pouvez définir vos variables d'environnement dans votre fichier ~/.pam_environment .

1
kzh