(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.
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
Vous pouvez utiliser Bash pour analyser/etc/profile et ~/.profile, puis commencer à pêcher.
Créez /usr/local/bin/fishlogin
avec le contenu
#!/bin/bash -l
exec -l fish "$@"
Le rendre exécutable
Sudo chmod +x /usr/local/bin/fishlogin
Ajoutez-le à/etc/shells
echo /usr/local/bin/fishlogin | Sudo tee -a /etc/shells
Définissez-le comme votre shell par défaut
Sudo usermod -s /usr/local/bin/fishlogin $USER
Pour une solution beaucoup plus propre, vous pouvez utiliser le plugin foreign env :
fenv source ~/.profile
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
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
Vous pouvez utiliser bass , un plugin pour exécuter des commandes bash dans fish.
$ git clone https://github.com/edc/bass.git
$ cd bass
$ make install
Et puis, mettez ceci dans votre config.fish
:
bass source ~/.profile
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
.
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
Si votre distribution utilise PAM , vous pouvez définir vos variables d'environnement dans votre fichier ~/.pam_environment
.