fishシェルで特定のコマンドがあるときのif文を書く

dotfilesの中にあるconfig書いているときに、「ビルトインじゃないコマンドを持っている環境の場合にこうしたい」みたいな気持ちになったのだけど、fishでいまいち書き方がわからなかったので調べた。

if…?

if構文がこれなんだけど、『コマンドがあるとき』のとり方がわからなかった。

fishshell.com

issueとかstackoverflowみてたら古めのIssueがあった。 type -q らしい。

Best way to check if command is available? · Issue #1774 · fish-shell/fish-shell · GitHub

ちなみにどういうことやりたかったのか

exaをインストールして、エイリアスを貼りたかった。

github.com

なんかこういう記事をたまたま読んで、エイリアス便利そうと思った。

Rust製ツールでおしゃれなターミナル環境を作る【Starship ✕ exa】

そういうわけで僕のdotfilesの中のfish.configにはこういうエイリアスが書かれた。

# ## exa
if type -q exa
  alias e='exa --icons --git'
  alias ls=e
  alias ea='exa -a --icons --git'
  alias la=ea
  alias ee='exa -aahl --icons --git'
  alias ll=ee
  alias et='exa -T -L 3 -a -I "node_modules|.git|.cache" --icons'
  alias lt=et
  alias eta='exa -T -a -I "node_modules|.git|.cache" --color=always --icons | less -r'
  alias lta=eta
end