47 votes

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

(Je parle du Shell). Poisson , esp. Le poisson du poisson .)

Pour Bash/ZSH, j'avais ~/.profile avec quelques exportations, alias et autres choses.

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

Dans la FAQ, il est indiqué que je peux au moins les importer via /usr/local/share/fish/tools/import_bash_settings.py mais je n'aime pas vraiment faire cela pour chaque instance de poisson.

45voto

Noé Rubinstein Points 513

Vous pouvez utiliser bash pour analyser /etc/profile y ~/.profile , puis lancez le poisson.

  1. Créer /usr/local/bin/fishlogin avec contenu

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

     sudo chmod a+rx /usr/local/bin/fishlogin
  3. Vérifiez qu'il fonctionne en lançant fishlogin et en vérifiant que vous vous retrouvez dans un Poisson Shell. Appuyez sur Ctrl+D pour quitter la Shell.

  4. L'ajouter à /etc/shells

     echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
  5. Définissez-le comme votre Shell par défaut.

    Sous Linux :

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

    Sous macOS :

     chsh -s /usr/local/fishlogin $USER

34voto

jgillich Points 970

Pour une solution beaucoup plus propre, vous pouvez utiliser la fonction env. étranger plugin :

fenv source ~/.profile

15voto

Ma solution actuelle (voir aquí 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

9voto

rsalmei Points 161

Vous pouvez utiliser basse un plugin permettant d'exécuter des commandes bash dans fish.

  1. Installer les basses .

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

    bass source ~/.profile

6voto

user137752 Points 1

J'ai essayé de sourcer .profile sur le démarrage du poisson et cela a fonctionné comme un charme pour moi.

faire :

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

Redémarrer le terminal ou iterm2, tester un alias à partir de .profile à tester.

Note : Ne fonctionne pas avec les fichiers .profile plus complexes qui utilisent une syntaxe non disponible dans fish - crédit @erb

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X