BashとFish間の環境変数の共有

BashとFish間の環境変数の共有

bashとfishスクリプトは互換性がありませんが、bashとfishで初期化されたいくつかの環境変数を定義するファイルが必要です。

~/.env私が提案する解決策は、次の環境変数のリストを含むファイルを定義することです。

PATH="$HOME/bin:$PATH"
FOO="bar"

その後、bashからインポートし、それをfish形式に変換し、fishにインポートするスクリプトを作成できます。

これより良い解決策があるのではないかと考えて、bash Fish間で環境変数を共有するより良い方法を求めました。

注:私はOS Xを使用しています。


.env以下は、Fishとbashの両方を処理するために使用できることを望むサンプルファイルです。無言の魚の文法(~/bin および ~/bin2 が空のディレクトリであると仮定):

setenv _PATH "$PATH"
setenv PATH "$HOME/bin"
setenv PATH "$PATH:$HOME/bin2"
setenv PATH "$PATH:$_PATH"

ベストアンサー1

bashには環境変数を設定するための特別な構文がありますが、Fishは組み込み構文を使用します。次のように.envファイルを作成することをお勧めします。

setenv VAR1 val1
setenv VAR2 val2

次に、setenvそのシェルで適切な定義を作成します。 Bash(例:bashrc):

function setenv() { export "$1=$2"; }
. ~/.env

魚(例:config.fish)から:

function setenv; set -gx $argv; end
source ~/.env

PATHはFishでは配列ですが、bashではコロンで区切られた文字列なので、特別な処理が必要です。 .envで書くことを好むなら、setenv PATH "$HOME/bin:$PATH"Fishのsetenvを次のように書くことができます:

function setenv
    if [ $argv[1] = PATH ]
        # Replace colons and spaces with newlines
        set -gx PATH (echo $argv[2] | tr ': ' \n)
    else
        set -gx $argv
    end
 end

スペース、コロン、または改行文字を含むPATH要素を誤って処理します。

PATHの厄介さは、コロンで区切られた文字列と実際の配列が混在して発生します。 FishからPATHに追加する基本的な方法は簡単ですset PATH $PATH ~/bin

おすすめ記事