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

答え2

@Zancheyの答えに基づいて(現在?)より簡単な方法があります。

Fish Shell: エクスポートを使用してファイルに複数の環境変数を設定する方法

要約は次のとおりです。

魚:

echo -e "foo=3\nfoobar=4" > .env; export (cat .env); env | grep foo

大きな打撃:

echo -e "foo=3\nfoobar=4" > .env; export $(cat .env | xargs); env | grep foo

違いは$使用方法にあります。xargs

答え3

ほとんどのUnixシステムではポリアクリルアミド。これpam_env基準寸法ファイルを読むことは.env

Linuxでpam_envシステムファイル/etc/environmentとユーザーファイルを読みます~/.pam_environmentOS Xでは(およびOpenPAMを使用する他の* BSD)システムファイルのみを読み取るように見えるため、pam_envこの方法では各ユーザーに変数を設定することはできず、すべてのユーザーにのみ変数を設定できます。

答え4

という名前のすべての環境変数を保存するファイルを作成します~/.config/env_variables。このファイルにexport次の行を追加します。

# This file is meant to compatible with multiple shells, including:
# bash, zsh and fish. For this reason, use this syntax:
#    export VARNAME=value

export EDITOR=vim
export LESS="-M"
export GOPATH="$HOME/.local/share/gopath/"
export PATH="$PATH:/custom/bin/"

ファイルには次の~/.config/fish/config.fishものが含まれます。

source ~/.config/env_variables

ファイルには次の~/.bashrcものが含まれます。

source ~/.config/env_variables

関連情報