in Antarctica

いろんなメモ

fishの文法を書くのがめんどくさい人のためのTips

fish shellを使って2年がたちました

今では結構使っている人も多いのではないでしょうか

fishはとても使いやすい良いshellです. ただbashzshと文法が大きくことなります.

特に苦労する機会が多いのは環境変数の文法や &&, || が使えないことだと思います.

僕の2年悩んだ苦渋にまみれた解決策があるのですが、 余り同じようなことをしている人をみないので共有します.

苦渋にまみれているので、デメリットもあることを念頭に置いておいてください.

fishの環境変数

bashzshでは環境変数

export HOGE=hensu-dayo

と書くと思います.

fishでは

set -x HOGE hensu-dayo

こうですね.

全然違うので web上に乗っているscriptを毎回書き直すの 面倒です.

苦渋にまみれた解決策

  1. まずデフォルトshellをbashに変更します.

  2. そして以下のように.bash_profileに環境変数を記述し fishを起動します 😇

.bash_profile

export HOGE=hensu-dayo

exec fish

これであら不思議, 環境変数bashのままfishを使えます 😇

デメリットとして, bashを起動しようとしてもfishが開きます 😇

&& ||が使えない

bashでは

echo hoge && echo foo

というように記述しますが,

fishでは

echo hoge; and echo foo

といった風になります.

書き直すのめんどくさいですね

苦渋にまみれた解決策

  • bash -c オプションを使う
bash -c 'echo hoge && echo foo'

これでそのままコピペできますね😇

それでもやっぱりめんどくさい😇

fishの関数を作って少しでも楽をします. 以下のようなfishスクリプト~/.config/fish/functions/bash_c.fishとして保存します.

~/.config/fish/functions/bash_c.fish

function bash_c
  read --prompt="echo 'write bash script: '" bash_script
  bash -c $bash_script
end

これでfishでbash_cをうち、bashスクリプトを入力するとbashを実行できます.

ただしあくまでbashのプロセスが立ち上がり実行されるので、ここで環境変数の設定とかはできません😇

だれか良い方法を教えてください😇