web-dev-qa-db-ja.com

Fishの「〜/ .profile」を再利用しますか?

(私はシェルについて話している 、特に 魚の魚 。)

Bash/ZSHの場合、いくつかのエクスポート、エイリアス、およびその他の機能を備えた~/.profileがありました。

Fishの環境変数に個別の設定をしたくないので、~/.profileを再利用します。どうやって?

FAQには、少なくとも/usr/local/share/fish/tools/import_bash_settings.py経由でインポートできると記載されていますが、Fishインスタンスごとに実行することはあまり好きではありません。

35
Albert

私の現在の解決策(おそらく最新バージョンについては ここ を参照してください):

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
15
Albert

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
    
30
Noé Rubinstein

よりクリーンな解決策として、 foreign env プラグインを使用できます。

fenv source ~/.profile
15
jgillich

プラグイン bass を使用して、fishでbashコマンドを実行できます。

  1. ベースのインストール

    $ git clone https://github.com/edc/bass.git
    $ cd bass
    $ make install
    
  2. そして、これをconfig.fish

    bass source ~/.profile
    
5
rsalmei

魚のスタートアップで.profileを調達してみましたが、それは私にとって魅力的なものでした。

ただ:

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

端末またはiterm2を再起動し、.profileからエイリアスをテストしてテストします。

注:fishでは使用できない構文を使用するより複雑な.profileファイルでは機能しません-credit @erb

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
3
yegorius

できません。 fishの構文は、Bourne Shell(/bin/sh)の構文とはあまりにも異なります。これは、cshtcshなどの他の非Bourne派生シェルで.profileを使用できない同じ理由です。

1
Spiff

BashからFishを起動できます。そうすると、Fishはすべての環境変数(export FOO=bar)バッシュから。この時点で、Bashはすでに.profile(など)。

bash-3.2$ export TEST="test"
bash-3.2$ fish
cmey@MBP ~> echo $TEST
test
1
cmey

ディストリビューションで [〜#〜] pam [〜#〜] を使用している場合、環境変数を ~/.pam_environment ファイル。

1
kzh