🔖

Mac zsh fzf で選択肢からコマンドを実行させる

に公開

参加しているプロジェクトで、DB に接続するのに環境ごとに異なる長いコマンドを毎回実行する必要があり、記憶力が無なのでコマンドを覚えられないから、コマンドをメモしておいてコピペで実行してたのですが、流石に面倒すぎたのでスクリプトを作ることにしました。

要件

  1. どこからでも実行できる
  2. 選択肢別にコマンドが実行される

npx create xxx のようなイメージでターミナル上に選択肢を出して、選んだら選択肢ごとのコマンドが実行できるようにしたい

1. fzf を使って選択肢別にコマンドを実行するスクリプトを作成する

fzf のインストール

$ brew fzf

選択肢が選べる shell script の作成

./myScript/connectDB.sh
#!/bin/zsh
echo "Connect DB"

TARGETS=("dev" "prod")

selected=$(printf "%s\n" "${TARGETS[@]}" | fzf --prompt="Select target:" --height=4 --cycle)

if [[ -z "$selected" ]]; then
  exit 1
fi

echo "Connect: $selected"

for choice in ${(f)selected}; do
  case "$choice" in
    "dev")
      echo "\033[1;33;40m!!! Connect DEV DB !!!\033[0m" 
      # dev が選択された時に実行するコマンド
      ;;
    "prod")
      echo "\033[1;37;41m!!! Connect PROD DB !!!\033[0m"
      # prod が選択された時に実行するコマンド
      ;;
  esac
done

2. どこからでも実行できるようにする

~/.myScript 内にシェルスクリプトを作成したので、パスを設定する

.zshrc
export PATH="/Users/{USERNAME}/.myScript:$PATH"

コマンドのエイリアスを作成する

.zshrc
alias cdb='~/.myScript/connectDB.sh'

これでターミナルを再起動すると
cdb コマンドで dev, prod どちらに接続するかの選択肢が表示され、選択した方の DB に繋げられるようになった


https://github.com/junegunn/fzf
https://github.com/junegunn/fzf/wiki/Examples
https://qiita.com/kamykn/items/aa9920f07487559c0c7e

Discussion