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
。