생선에 ‘~ / .profile’을 다시 사용 하시겠습니까? 물고기 ESP.

(I 쉘에 대해서 이야기하고 물고기 ESP. 물고기의 물고기 .)

Bash / ZSH의 경우 ~/.profile수출, 별칭 및 기타 것들이있었습니다.

Fish의 환경 변수에 대한 별도의 구성을 원하지 않고 내 재사용을 원합니다 ~/.profile. 방법?

FAQ에는 적어도을 통해 가져올 수 있다고 명시되어 /usr/local/share/fish/tools/import_bash_settings.py있지만 각 물고기 인스턴스마다 실행하는 것을 좋아하지 않습니다.



답변

Bash를 사용하여 / etc / profile 및 ~ / .profile을 구문 분석 한 다음 물고기를 시작할 수 있습니다.

  1. /usr/local/bin/fishlogin내용으로 작성

    #!/bin/bash -l
    exec -l fish "$@"
    
  2. 그것을 실행 가능하게 만드십시오

    sudo chmod +x /usr/local/bin/fishlogin
    
  3. / etc / shells에 추가

    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
    
  4. 기본 쉘로 설정

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

답변

내 현재 솔루션 ( 아마도 최신 버전 은 여기 참조 ) :

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


답변

플러그인 bass 를 사용 하여 물고기에서 bash 명령을 실행할 수 있습니다 .

  1. 베이스를 설치하십시오 .

    $ git clone https://github.com/edc/bass.git
    $ cd bass
    $ make install
    
  2. 그리고 나서, 이것을 당신의 config.fish:

    bass source ~/.profile
    

답변

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

답변

당신은 할 수 없습니다. fish의 구문이 Bourne 쉘 ( /bin/sh) 구문과 너무 다릅니다 . 이것은 당신이 사용할 수있는 동일한 이유 .profile와 같은 다른 비 Bourne의 유래 껍질로 cshtcsh.