Diferentemente do bash, o PATH de peixe é uma matriz de diretórios: link
sed '/^PATH=/s/:/\' \'/g; s/\(.*\)="\(.*\)".*/set -x \'\';/'
Eu gosto de colocar muitas das minhas definições de variáveis de ambiente no script .profile
. Se eu estiver usando um shell interativo compatível com POSIX como o bash, posso usar o comando source para exportar novamente as variáveis de ambiente de .profile
quando for atualizado, sem precisar abrir uma nova janela de terminal. Existe uma maneira de fazer o mesmo quando estou usando fish
, que usa uma sintaxe diferente para exportar variáveis? Posso dizer ao fish para executar um subprocesso sh
e reexportar as variáveis que ele define?
Quando tento fazer o óbvio sh .profile
, as variáveis de ambiente aparentemente só são definidas na criança sh
process e não são atualizadas no processo pai fish
.
edit: o código do shell que define minhas variáveis é este
CAML_LD_LIBRARY_PATH="/home/hugo/.opam/4.01.0/lib/stublibs"; export CAML_LD_LIBRARY_PATH;
PERL5LIB="/home/hugo/.opam/4.01.0/lib/perl5:"; export PERL5LIB;
OCAML_TOPLEVEL_PATH="/home/hugo/.opam/4.01.0/lib/toplevel"; export OCAML_TOPLEVEL_PATH;
MANPATH=":/home/hugo/.opam/4.01.0/man"; export MANPATH;
PATH="/home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"; export PATH;
Infelizmente, esse código é gerado automaticamente por outro programa, portanto, a conversão para o Fish também deve ser feita usando um processo automatizado. Eu tentei usar o seguinte script sed
sed 's/\(.*\)="\(.*\)".*/set -x \'\';/'
que produz o seguinte código de Peixe
set -x CAML_LD_LIBRARY_PATH '/home/hugo/.opam/4.01.0/lib/stublibs';
set -x PERL5LIB '/home/hugo/.opam/4.01.0/lib/perl5:';
set -x OCAML_TOPLEVEL_PATH '/home/hugo/.opam/4.01.0/lib/toplevel';
set -x MANPATH ':/home/hugo/.opam/4.01.0/man';
set -x PATH '/home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games';
Qual eu posso executar usando eval e ()
substitution
eval (my-sed-script)
No entanto, o peixe está reclamando quando tento definir o PATH. Eu acho que pode ser PATH de invólucro especial e esperar uma matriz em vez de uma única string.
set: Warning: path component /home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games may not be valid in PATH.
set: No such file or directory
set: Did you mean 'set PATH $PATH /home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games'?
Diferentemente do bash, o PATH de peixe é uma matriz de diretórios: link
sed '/^PATH=/s/:/\' \'/g; s/\(.*\)="\(.*\)".*/set -x \'\';/'
Tags bash environment-variables sh fish