답변:
Bash를 사용하여 / etc / profile 및 ~ / .profile을 구문 분석 한 다음 물고기를 시작할 수 있습니다.
/usr/local/bin/fishlogin
내용으로 작성
#!/bin/bash -l
exec -l fish "$@"
그것을 실행 가능하게 만드십시오
sudo chmod +x /usr/local/bin/fishlogin
/ etc / shells에 추가
echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
기본 쉘로 설정
sudo usermod -s /usr/local/bin/fishlogin $USER
usermod -s /usr/local/bin/fishlogin $USER
은chsh -s /usr/local/fishlogin $USER
chsh: /usr/local/bin/fishlogin: non-standard shell
추가해야 할 경우/etc/shells
fish "$@"
로 교체해야합니다 exec -l fish "$@"
. exec
반면, 물고기와 배시 프로세스를 대체 -l
원인 argv[0]
어류이고 -fish
, 신호는이 로그인 쉘된다.
내 현재 솔루션 ( 아마도 최신 버전 은 여기 참조 ) :
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
훨씬 깨끗한 솔루션을 위해 foreign env 플러그인을 사용할 수 있습니다 .
fenv source ~/.profile
나는 물고기 시작에 .profile 소싱을 시도했고 그것은 나를 위해 매력처럼 작동했습니다.
그냥 해 :
echo 'source ~/.profile;clear;' > ~/.config/fish/config.fish
터미널 또는 iterm2를 다시 시작하고 별명 .profile
을 테스트하여 테스트하십시오.
참고 : fish에서는 사용할 수없는 구문을 사용하는 더 복잡한 .profile 파일에서는 작동하지 않습니다-credit @erb
.profile
물고기에서는 사용할 수없는 구문을 사용 하는 더 복잡한 파일 에서는 작동 하지 않습니다.
플러그인 bass 를 사용 하여 물고기에서 bash 명령을 실행할 수 있습니다 .
$ git clone https://github.com/edc/bass.git
$ cd bass
$ make install
그리고 나서, 이것을 당신의 config.fish
:
bass source ~/.profile
.profile
. 너무 많은 일 이 당신의 것입니다.
bass
반면에 모든 bash 쉘 스크립트를 해석하여 물고기에서 실행시킵니다. 분명히 약간 더 많은 오버 헤드가 있지만 내 경험에서는 완전히 무시할 수 있지만 마일리지는 다를 수 있습니다.
dash
이 라인을 설치 하고 추가하십시오 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
dash
– 그냥 sh
할 것입니다 (아마도 대시 일 것입니다)
당신은 할 수 없습니다. fish
의 구문이 Bourne 쉘 ( /bin/sh
) 구문과 너무 다릅니다 . 이것은 당신이 사용할 수있는 동일한 이유 .profile
와 같은 다른 비 Bourne의 유래 껍질로 csh
와 tcsh
.
배포에서 PAM을 사용하는 경우 ~/.pam_environment
파일 에서 환경 변수를 설정할 수 있습니다 .