web-dev-qa-db-ja.com

MacでFishの.bash_profileを再利用する

MacでiTermを使用していますが、快適に使用している.bash_profileがあります。最近、fish bashについて知り、Macにインストールしましたが、突然、.bash_profileが読み込まれなくなりました。なぜ私がそれを見ることができなかったのかに関するアイデアはありますか?

以前は魚なしで行っていたように、iTermと魚に.bach_profileを取得するように指示するにはどうすればよいですか?

8
sparkr

Fishには、デフォルトで$ HOME/.config/fish/config.fishという名前のユーザー制御構成ファイルが1つだけあります。 Fishには、bash/zsh/shとの互換性のためのエクスポートコマンドもありますが、fishフォームの薄いラッパーにすぎません。

set -gx VAR value

Bashエイリアスに関しては、2つの選択肢があります。それらを省略形(「abbr」コマンドを参照)または関数に変換します。魚では、「エイリアス」コマンドで関数を定義できますが、それは単に

alias myalias some_command --arg1 --arg2

function myalias; some_command --arg1 --arg2 $argv; end

Glenn Jackmanが指摘したように、「魚は強打ではない」。改良されたbashではありません。魚に切り替えるのは難しいことではありませんが、少しの努力が必要です。私は13か月前に切り替えを行いましたが、努力する価値はあります。

6
Kurtis Rader

このスクリプトは overtrue で使用できます: [Gist link]

基本的に.bash_profileを解析し、Fishに同じ環境変数を設定します。
私にとってはうまくいきます!

# Fish Shell

egrep "^export " ~/.bash_profile | while read e
    set var (echo $e | sed -E "s/^export ([A-Za-z_]+)=(.*)\$/\1/")
    set value (echo $e | sed -E "s/^export ([A-Za-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)

    #echo "set -xg '$var' '$value' (via '$e')"
    set -xg $var $value
end
2
Pavel Alexeev