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_environment
。OS 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